ファイル内のテキストを検索して置換する方法 質問する

ファイル内のテキストを検索して置換する方法 質問する

Python 3 を使用してファイル内のテキストを検索および置換するにはどうすればよいですか?

これが私のコードです:

import os
import sys
import fileinput

print("Text to search for:")
textToSearch = input("> ")

print("Text to replace it with:")
textToReplace = input("> ")

print("File to perform Search-Replace on:")
fileToSearch = input("> ")

tempFile = open(fileToSearch, 'r+')

for line in fileinput.input(fileToSearch):
    if textToSearch in line:
        print('Match Found')
    else:
        print('Match Not Found!!')
    tempFile.write(line.replace(textToSearch, textToReplace))
tempFile.close()

input('\n\n Press Enter to exit...')

入力ファイル:

hi this is abcd hi this is abcd
This is dummy text file.
This is how search and replace works abcd

上記の入力ファイルで「ram」を検索して「abcd」に置き換えると、うまくいきます。しかし、その逆、つまり「abcd」を「ram」に置き換えると、最後に不要な文字が残ります。

「abcd」を「ram」に置き換えます。

hi this is ram hi this is ram
This is dummy text file.
This is how search and replace works rambcd

ベストアンサー1

としてmichaelb958 が指摘、長さの異なるデータでその場で置き換えることはできません。そうすると、残りのセクションがずれてしまいます。他の投稿者が提案している、あるファイルから読み取って別のファイルに書き込むという方法には同意しません。代わりに、ファイルをメモリに読み込み、データを修正してから、別の手順で同じファイルに書き出します。

# Read in the file
with open('file.txt', 'r') as file:
  filedata = file.read()

# Replace the target string
filedata = filedata.replace('abcd', 'ram')

# Write the file out again
with open('file.txt', 'w') as file:
  file.write(filedata)

ただし、一度にメモリに読み込むには大きすぎる巨大なファイルを扱う場合や、ファイルにデータを書き込む 2 番目の手順でプロセスが中断された場合にデータが失われる可能性があると懸念している場合は除きます。

おすすめ記事