1. ホーム
  2. python

[解決済み] Pythonでファイルの読み込みと上書きをする

2022-07-14 09:39:35

質問

現在、使用しているのはこれです。

f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.close()

しかし、問題は古いファイルが新しいファイルより大きいということです。そのため、新しいファイルの末尾に古いファイルの一部が残ってしまうんです。

どのように解決するのですか?

レースコンディションを避けるために、ファイルを閉じたり開き直したりしたくない場合は、次のようにします。 truncate とする。

f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()

また、機能的には、おそらく よりクリーンで安全な を使用して open をコンテキスト・マネージャーとして使用することで、エラーが発生してもファイル・ハンドラを閉じます!

with open(filename, 'r+') as f:
    text = f.read()
    text = re.sub('foobar', 'bar', text)
    f.seek(0)
    f.write(text)
    f.truncate()