3

私は StackOverflow を見回しましたが、特定の質問に対する答えが見つからなかったので、何か見逃していたら許してください。

import re

target = open('output.txt', 'w')

for line in open('input.txt', 'r'):
    match = re.search(r'Stuff', line)
    if match:
        match_text = match.group()
        target.write(match_text + '\n')
    else:
        continue
target.close()

解析しているファイルは巨大なので、1 行ずつ処理する必要があります。

これは(もちろん)ファイルの最後に追加の改行を残します。

「一致する場合」ループの最後の繰り返しで、ファイルの最後に余分な改行文字が置かれないように、このコードをどのように変更するのが最善でしょうか。最後にファイルをもう一度調べて、最後の行を削除する必要がありますか (少し効率が悪いようですが)。

私が見つけた既存の StackOverflow の質問は、ファイルからすべての新しい行を削除することをカバーしています。

このコードを書くためのよりPythonic/効率的な方法があれば、私自身の学習のための提案も歓迎します.

助けてくれてありがとう!

4

4 に答える 4

7

次の行の先頭に各行の改行を記述します。最初の行の先頭に改行を書き込まないようにするには、空の文字列に初期化された変数を使用してから、ループ内で改行に設定します。

import re

with open('input.txt') as source, open('output.txt', 'w') as target:

    newline = ''
    for line in source:
        match = re.search(r'Stuff', line)
        if match:
            target.write(newline + match.group())
            newline = '\n'

また、コードを少し再構築し (else: continueループは他に何をするので、必要ありませんか?)、withステートメントを使用するように変更して、ファイルが自動的に閉じられるようにしました。

于 2013-08-09T02:55:20.423 に答える