读取文件并向后写入

时间:2013-10-29 02:15:46

标签: python python-3.x

#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())

1 个答案:

答案 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

祝你好运,玩得开心!