0

私はこのスニペットを持っていますが、奇妙なことが起こっています:

out = open("./out.txt","w+")
for line in open("./int.txt","r").readlines():
    for key in dic.keys():
        if line.count(key) > 0:
            line = re.sub(key,dic[key],line)
    print line
    out.write(line)

Pythonのシェルへの出力は、ファイルに約半分の行が含まれているdic{}間、スイッチの後のすべての行が含まれている正しいものです?out

4

2 に答える 2

1

ステートメントを使用withて出力ファイル ハンドルのコンテキストを管理し、スコープの最後で閉じられるようにすることをお勧めします (これにより、表示時に最新の状態になります)。ループは、入力ファイルを使用forしてこれを行います。

with open("./out.txt", "w+") as out:
    for line in open("./int.txt", "r"):
        for key in dic.keys():
            if key in line:
                line = re.sub(key, dic[key], line)
        print line,
        out.write(line)

その他のいくつかの小さな変更:

  • .readlines()必須ではありません
  • if key in line:最初のインスタンスが見つかったらkeyin の検索を停止し、効率を向上させます。line
  • print line,の後に別の改行を追加しませんline

line = line.replace(key, dic[key])で正規表現を検索していないため、十分かどうかも検討してくださいline

于 2013-02-18T03:08:23.897 に答える
1

ファイルは常にすぐにディスクに書き込まれるとは限らず、フラッシュする必要があります 最後に out.flush() を試してください

于 2013-02-18T02:53:08.867 に答える