有没有一种方法可以使用 python 中的函数反转文本文件中行的顺序?

Is there a way to reverse the order of lines within a text file using a function in python?

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 循环中使用此功能)。

有什么建议吗?谢谢!

您是要颠倒行的顺序还是每行中单词的顺序?

反转线条可以通过简单地阅读线条并使用 built-in reverse 函数来完成:

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

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

否则,只需反转每一行即可:

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

我认为你提到的错误是在这个函数中:

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

您不需要在 line 上调用 read(),因为它已经是一个字符串; read() 在文件对象上调用,以便将它们转换为字符串。只是做:

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

它会反转整行。

如果您想颠倒行中的单个单词,同时让它们在行中保持相同的顺序(例如,将“the cat sat on a hat”变成“eht tac tas no a tah”),会是这样的:

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

如果您想颠倒单词的顺序而不是单词本身(例如,将“the cat sat on a hat”变成“hat a on sat cat the”),那就是:

def reverse_word_order(line):
    return ' '.join(line.split()[::-1])