Py学习  »  Python

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

Athar Jaffery • 3 年前 • 1227 次点击  
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
 
1227 次点击  
文章 [ 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()