3

たくさんのテキストを含むファイルがあり、それを切り取って、たくさんのものを一致させてから、これらのアイテムを新しいファイルの別々の行に書き込みます。

これが私がまとめたコードの基本です。

f = open('this.txt', 'r')
g = open('that.txt', 'w')
text = f.read()
matches = re.findall('', text) # do some re matching here
for i in matches:
    a = i[0] + '\n'
    g.write(a)
f.close()
g.close()

私の問題は、一致する各アイテムを新しい行(したがって、「\ n」)に配置したいのですが、ファイルの最後に空白行を配置したくないということです。

ファイルの最後の項目の後に改行文字を付ける必要はないと思います。

これを整理するPythonの方法は何ですか?また、コードでこれを設定した方法は、これを行うための最良の方法ですか、それとも最もPythonicですか?

4

1 に答える 1

6

間に改行があり、最後に改行がない一連の行を書きたい場合は、str.join. つまり、for ループを次のように置き換えます。

output = "\n".join(i[0] for i in matches)
g.write(output)

特にコードが例外によって中断される可能性がある場合に、ファイルを明示的に閉じる必要がないようにするために、withステートメントを使用して物事を簡単にすることができます。次のコードは、質問のコード全体を置き換えます。

with open('this.txt') as f, open('that.txt', 'w') as g:
    text = f.read()
    matches = re.findall('', text) # do some re matching here
    g.write("\n".join(i[0] for i in matches))

または、両方のファイルを同時に開く必要がないため:

with open('this.txt') as f:
    text = f.read()
matches = re.findall('', text) # do some re matching here
with open('that.txt', 'w') as g:
    g.write("\n".join(i[0] for i in matches))
于 2012-11-11T09:05:48.773 に答える