#input
inPut = input("Please enter a file name: ")
outPut = input("Please enter a file name which you would like the file reversed: ")
#open
infile = open(inPut, "r")
outfile = open(outPut, "w")
#list main file
line = infile.readline()
line = line.rstrip()
while line != "" :
print(line)
line = infile.readline()
line = line.rstrip()
#output file in reversed
outfile.write(
####confused here######
#close files
infile.close()
outfile.close()
所以我一直试图解决这个问题,我在下面的书中发现了这个代码,它假设向后列出一个文件。我很困惑如何将其应用到我的代码中。我的主要目标是编写一个程序来读取文件中的每一行,然后反转它的行并将它们写入另一个文件。
for line in reversed(list(open("filename"))):
print(line.rstrip())
答案 0 :(得分:0)
reversed()
会向您返回您提供的数据副本,但顺序相反。
当您致电open(filename)
时,您会收到一个文件对象,该文件对象会为您提供文件中的行。 list()
列出了这些内容。 reversed()
然后以相反的顺序从列表中为您提供行。
如果你想反转一条线,你需要做这样的事情:
s = reversed(line)
但s
不是字符串。它将是一个迭代器,每次迭代它,你都会得到一个字符。您需要的是一种将这些字符连接回字符串的方法。
所以你可以使用str.join()
,它知道如何使用迭代器。您应该只使用空字符串作为连接字符之间的分隔符:
s = ''.join(reversed(line))
所以现在你只需要一种从文件中获取行的方法,以及写出更改的方法。这是最好的方法:
in_name = "some_input_file_name.txt"
out_name = "some_output_file_name.txt"
with open(in_name, "rt") as in_f, open(out_name, "wt") as out_f:
for line in in_f:
line = line.strip()
reversed_line = ''.join(reversed(line))
out_f.write(reversed_line + "\n")
所以只需修改上面的内容就可以让用户输入文件名,我想你会拥有你想拥有的东西。
如果您想了解有关迭代器的更多信息,请从这里开始:http://docs.python.org/dev/howto/functional.html#iterators
祝你好运,玩得开心!