1. ホーム
  2. python

[解決済み] Pythonでファイル内の行を検索して置換する

2022-03-16 15:57:29

質問

テキストファイルの内容をループして、いくつかの行で検索と置換を行い、その結果をファイルに書き戻したいのです。最初にファイル全体をメモリに読み込んでから書き戻すこともできますが、おそらくそれは最善の方法ではないでしょう。

次のコードの中で、これを行うための最良の方法は何でしょうか?

f = open(file)
for line in f:
    if line.contains('foo'):
        newline = line.replace('foo', 'bar')
        # how to write this newline back to the file

解決方法は?

こんな感じでいいんじゃないでしょうか。基本的には、新しいファイルにコンテンツを書き込み、古いファイルを新しいファイルで置き換えます。

from tempfile import mkstemp
from shutil import move, copymode
from os import fdopen, remove

def replace(file_path, pattern, subst):
    #Create temp file
    fh, abs_path = mkstemp()
    with fdopen(fh,'w') as new_file:
        with open(file_path) as old_file:
            for line in old_file:
                new_file.write(line.replace(pattern, subst))
    #Copy the file permissions from the old file to the new file
    copymode(file_path, abs_path)
    #Remove original file
    remove(file_path)
    #Move new file
    move(abs_path, file_path)