一括置換
str.replace()
を使って(正規表現を使わず)ファイル中の文字列を一括置換するコマンドを作ってみましょう。
#! /usr/bin/env python3 import sys for arg in sys.argv[3:]: with open(arg, encoding='utf-8') as f: s = f.read() t = s.replace(sys.argv[1], sys.argv[2]) if t != s: with open(arg, 'w', encoding='utf-8') as f: f.write(t)
これを replace.py
という名前で保存して,パスの通った場所に置いておき,例えば
replace.py hoge fuga *.tex
と打ち込めば,カレントディレクトリの *.tex
全体にわたって hoge
を fuga
に置き換えてくれます。
str.replace()
は複数行の置き換えにも対応します。例えば s.replace("hoge\nfuga\n", "")
とすると「hoge改行fuga改行」という2行を削除します。
str.replace()
には3番目の引数もあって,例えば s.replace("hoge", "fuga", 1)
とするとそのファイルについて1回だけ置換を実行します。
一括置換をより安全に実行するには,別にフォルダを作っておき,置換した結果をそちらに入れて,問題がなければオリジナルを置き換えます:
for arg in sys.argv[1:]: with open(arg, encoding='utf-8') as f: orig = f.read() text = orig text = text.replace("A", "B") text = text.replace("C", "D") if text != orig: with open('new/' + arg, 'w', encoding='utf-8') as f: f.write(text)