社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

有没有办法使用python中的函数反转文本文件中的行顺序?

Athar Jaffery • 3 年前 • 1194 次点击  
def encrypt():
  while True:
    try:
        userinp = input("Please enter the name of a file: ")
        file = open(f"{userinp}.txt", "r")
        break  
    except:
      print("That File Does Not Exist!")
  second = open("encoded.txt", "w")
  
  
  for line in file:
    reverse_word(line)




def reverse_word(line):
  data = line.read()
  data_1 = data[::-1]
  print(data_1)
  return data_1

encrypt()











我现在应该制作一个程序,以某种方式对文本文件进行加密,我尝试使用的一种方法是反转文本文件中的行序列。我的所有其他函数都已经使用了“for line in file”,其中“line”被带到每个单独的函数中,然后为了加密而更改,但是当我试图在这里做同样的事情来反转文件中的行的顺序时,我得到了一个错误

“str”对象没有“read”属性

我试着使用与下面相同的顺序,但不是继承文件,这是可行的,但我想让它在我从文件中继承单独的行时可以工作,就像我目前使用的其他函数一样(或者更简单地说,在for循环中有这个函数)。

有什么建议吗?谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132210
 
1194 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Samwise
Reply   •   1 楼
Samwise    3 年前

我认为您所指的bug存在于这个函数中:

def reverse_word(line):
  data = line.read()
  data_1 = data[::-1]
  print(data_1)
  return data_1

你不需要打电话 read() 在…上 line 因为它已经是一根弦了; 读() 对文件对象调用,以便将其转换为字符串。只要做:

def reverse_line(line):
    return line[::-1]

它会让整个线路倒转。

如果你想倒转一行中的单个单词,同时保持它们在同一行中的顺序(例如,将“猫坐在帽子上”改为“eht tac tas no a tah”),那应该是这样的:

def reverse_words(line):
    return ' '.join(word[::-1] for word in line.split())

如果你想颠倒单词的顺序,而不是单词本身(例如,将“猫坐在帽子上”改为“猫坐在帽子上”),那将是:

def reverse_word_order(line):
    return ' '.join(line.split()[::-1])
KaibutsuX
Reply   •   2 楼
KaibutsuX    3 年前

你是想颠倒每行的顺序还是每行单词的顺序?

只需阅读这些行并使用内置的 reverse 功能:

lines = fp.readlines()
lines.reverse()

如果你想反转单词(实际单词,而不仅仅是每行的字符串),你需要做一些正则表达式来匹配单词边界。

否则,可以简单地反转每条线,如下所示:

lines = fp.readlines()
for line in lines:
    chars = list(line)
    chars.reverse()