如何在python 3中以相反的顺序将输入文件中的行写入输出文件

时间:2013-04-25 06:26:05

标签: python python-3.x readlines

我想要做的是从一个文本文档中获取一系列行,然后在一秒内将它们反向放置。例如,文本文档包含:

hi
there
people

因此,我想将这些相同的行写入文本文档b,除了这样:

people
there
hi

到目前为止,我有:

def write_matching_lines(input_filename, output_filename):
    infile = open(input_filename)
    lines = infile.readlines()
    outfile = open(output_filename, 'w')
    for line in reversed(lines):
            outfile.write(line.rstrip())
    infile.close()
    outfile.close()

但这只会返回:

peopletherehi 

在一行。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

您只需要+ '\n',因为.write不会为您执行此操作,或者您可以使用

print >>f, line.rstrip()

等效于Python 3:

print(line.rstrip(), file=f) 

将为您添加新行。或者做这样的事情:

>>> with open('text.txt') as fin, open('out.txt', 'w') as fout:
        fout.writelines(reversed([line.rstrip() + '\n' for line in fin]))

此代码假设您不知道最后一行是否有换行符,如果您知道确实您可以使用

fout.writelines(reversed(fin.readlines()))

答案 1 :(得分:3)

一行会做:

open("out", "wb").writelines(reversed(open("in").readlines()))

答案 2 :(得分:2)

为什么在编写之前先搜索你的行?当你编写它时,你会在每一行的末尾剥离换行符。但是你会注意到你没有任何换行符。只需删除写入中的rstrip()即可。

少即是多。

更新

如果我无法证明/验证最后一行是否有终止换行符,我个人倾向于在前面弄清楚重要的一行。 E.g。

....
outfile = open(output_filename, 'w')
lines[-1] = lines[-1].rstrip() + '\n' # make sure last line has a newline
for line in reversed(lines):
        outfile.write(line)
....

答案 3 :(得分:0)

with open(your_filename) as h:
    print ''.join(reversed(h.readlines()))

或者,如果您想将其写入其他流:

with open(your_filename_out, 'w') as h_out:
    with open(your_filename_in) as h_in:
        h_out.write(''.join(reversed(h_in.readlines()))