次のコードがあります。これは、正規表現の置換を行うことにより、ファイルtest.texの各行を変更します。
import re
import fileinput
regex=re.compile(r'^([^&]*)(&)([^&]*)(&)([^&]*)')
for line in fileinput.input('test.tex',inplace=1):
print regex.sub(r'\3\2\1\4\5',line),
唯一の問題は、ファイル内の特定の行にのみ置換を適用したいということです。正しい行を選択するためのパターンを定義する方法がありません。そこで、各行を表示し、コマンドラインでユーザーにプロンプトを表示して、現在の行で置換を行うかどうかを尋ねます。ユーザーが「y」を入力すると、置換が行われます。ユーザーが単に何も入力しない場合、置換は行われません。
もちろん、問題は、コードinplace=1
を使用することで、stdoutを開いたファイルに効果的にリダイレクトしたことです。したがって、ファイルに送信されないコマンドラインに出力を表示する(たとえば、置換を行うかどうかを尋ねる)方法はありません。
何か案は?