Thomas Watnedal による回答に基づいています。ただし、これは元の質問の行ごとの部分に正確には答えません。関数は引き続き行ごとに置き換えることができます
この実装では、一時ファイルを使用せずにファイルの内容を置き換えます。その結果、ファイルのアクセス許可は変更されません。
また、replace の代わりに re.sub を使用すると、プレーン テキストの置換のみの代わりに正規表現の置換が可能になります。
ファイルを行単位ではなく単一の文字列として読み取ると、複数行の一致と置換が可能になります。
import re
def replace(file, pattern, subst):
# Read contents from file as a single string
file_handle = open(file, 'r')
file_string = file_handle.read()
file_handle.close()
# Use RE package to allow for replacement (also allowing for (multiline) REGEX)
file_string = (re.sub(pattern, subst, file_string))
# Write contents to file.
# Using mode 'w' truncates the file.
file_handle = open(file, 'w')
file_handle.write(file_string)
file_handle.close()