os.walkを使用して、特定のファイルタイプを検索するディレクトリを表示しています。ファイルタイプが見つかったら(txtや.xmlなど)、この定義を使用してファイル内の文字列(old
と呼ぶ)を辞書の文字列(new
と呼ぶ)に置き換えます。まずFileInput:作業中のディレクトリ内のファイルのみのバックアップファイルを作成します。
def multipleReplace(text, wordDict):
for key in wordDict:
text = text.replace(key, wordDict[key])
return text
、私はこのループを持っていた:
myDict = #dictionary with keys(old) and values(new)#
home = #some directory#
for dirpath, dirnames, filenames in os.walk(home):
for Filename in filenames:
filename = os.path.join(dirpath, Filename)
if filename.endswith('.txt') or filename.endswith('.xml'):
with fileinput.FileInput(filename,inplace=True,backup='.bak') as file:
for line in file:
print(multipleReplace(line,myDict),end='')
これはすぐに働いて、それがでold
文字列を発見したすべてのファイルにnew
の文字列とold
文字列に代わるしかし、問題は。私のスクリプトの中には、たとえファイルにold
という文字列が含まれているかどうかにかかわらず、すべてのファイルの.bakファイルが作成されています。
old
文字列を含むファイル(置換が行われたファイルのみ)にのみ.bakファイルを作成したいとします。 永遠に取り、私はそれらのファイルだけのためにFileInputクラスのメソッドを使用することができます方法newFiles.append(re.findall('\\b'+old+'\\b',line))
のようなものを使用して(すべてのファイルを読むだけold
文字列が含まれているものを追加しようとしたが、正規表現を見上げる。
これは働いていたあなたが@ccfありがとう! ) –