1

私がやりたいことは、1 つのテキスト ドキュメントから一連の行を取得し、それらを 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

1行で実行できます:

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

行を書く前に rstrip() を行うのはなぜですか? 書くときに、各行の最後にある改行を取り除きます。それでも、改行がないことに気付きます。書き込みで rstrip() を削除するだけです。

少ないほうがいいですね。

アップデート

最後の行に終了改行があることを証明/検証できなかった場合、個人的には、それが重要な1行を前もって台無しにする傾向があります。例えば

....
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 に答える