1

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

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

4 回答 4

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()))
于 2013-04-25T06:41:20.380 回答
3

一行会做:

open("out", "wb").writelines(reversed(open("in").readlines()))
于 2013-04-25T06:52:04.257 回答
2

为什么你在写之前 rstrip() 你的行?在编写时,您将在每行末尾剥离换行符。然后你注意到你没有任何换行符。只需删除您写入的 rstrip() 即可。

少即是多。

更新

如果我不能证明/验证最后一行有一个终止换行符,我个人倾向于在前面弄乱它重要的一行。例如

....
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)
....
于 2013-04-25T06:36:38.293 回答
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()))
于 2013-04-25T06:50:16.447 回答