Python|テキストファイルの内容を一括で置換する方法

1. はじめに

Pythonを使って大量のテキストファイルの内容を一括で置換したいと思ったことはありませんか?本記事では、Python|テキストファイルの内容を一括で置換する方法について、基礎から実用的なコード例までわかりやすく解説します。

この方法をマスターすれば、複数のファイルに含まれる文字列の修正や、CSVやログファイルのデータの置換処理など、実務でも役立つタスクをPythonで自動化できるようになります。

 

2. Pythonでテキストファイルを一括置換する基本

2-1. 一括置換の基本的な流れ

Pythonでテキストファイルの内容を一括置換する基本的な流れは次の通りです:

  1. 対象ファイルを開いて読み込む
  2. 指定した文字列を置換する
  3. 上書き保存する

2-2. 単一ファイルの文字列置換

まずは1つのファイルに対して、特定の文字列を置換する基本的なコードを見てみましょう。

# ファイルの内容を読み取り、置換して上書き保存する
file_path = 'sample.txt'

with open(file_path, 'r', encoding='utf-8') as f:
    content = f.read()

# 文字列を置換
content = content.replace('置換前の文字列', '置換後の文字列')

with open(file_path, 'w', encoding='utf-8') as f:
    f.write(content)

実行結果:

sample.txt の「置換前の文字列」が「置換後の文字列」に変わりました。

 

3. 複数ファイルの一括置換の実用例

3-1. ディレクトリ内のテキストファイルを一括処理

次に、ディレクトリ内の複数のファイルを一括で置換する例です。標準ライブラリの osglob を使ってファイルを取得し、先ほどの置換処理を繰り返します。

import os
import glob

# 置換したい文字列
old_text = 'foo'
new_text = 'bar'

# 対象のディレクトリ
target_dir = './text_files'

# テキストファイルを取得
for filepath in glob.glob(os.path.join(target_dir, '*.txt')):
    with open(filepath, 'r', encoding='utf-8') as f:
        content = f.read()

    # 文字列を置換
    new_content = content.replace(old_text, new_text)

    # 上書き保存
    with open(filepath, 'w', encoding='utf-8') as f:
        f.write(new_content)

    print(f'{filepath} を更新しました')

実行結果:

./text_files/file1.txt を更新しました
./text_files/file2.txt を更新しました

3-2. 正規表現を使った高度な置換

re モジュールを使えば、正規表現でより柔軟な置換が可能になります。

import re

file_path = 'sample.txt'

with open(file_path, 'r', encoding='utf-8') as f:
    content = f.read()

# 正規表現で数字3桁を「###」に置換
new_content = re.sub(r'\d{3}', '###', content)

with open(file_path, 'w', encoding='utf-8') as f:
    f.write(new_content)

実行結果:

「123」「456」などの数字がすべて「###」に置換されました。

 

4. 注意点・エラー対策

4-1. ファイルのバックアップを取ろう

置換処理は上書き保存を伴うため、元のファイルをバックアップしておくことを強くおすすめします。

4-2. 文字コードに注意

読み込むファイルの文字コードが utf-8 以外(例:Shift_JISなど)の場合、UnicodeDecodeError が発生する可能性があります。以下のようにエラーを回避できます:

try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        content = f.read()
except UnicodeDecodeError:
    print("文字コードを確認してください。")

4-3. 大文字・小文字の違いに注意

.replace() は大文字小文字を区別します。例えば “Python” と “python” は別物として扱われます。

正規表現を使えば、re.IGNORECASE で区別せずに置換できます。

new_content = re.sub(r'python', 'Python', content, flags=re.IGNORECASE)

 

5. まとめ

今回は、Pythonを使ってテキストファイルの内容を一括で置換する方法について解説しました。基本の replace() から、glob を使った一括処理、re による正規表現置換まで幅広く取り上げました。

実務でも、ログやCSVファイル、設定ファイルなどを一括処理する場面は多く、今回の内容は業務効率化やスクリプト作成に大いに役立ちます。

学習のコツとしては、まずは単一ファイルから試し、徐々に対象ファイルを増やして応用していくと理解が深まります。

タイトルとURLをコピーしました