web-dev-qa-db-ja.com

ファイル内の複数の単語を見つけて置換するpython

ここ からサンプルコードを取得しました。

f1 = open('file1.txt', 'r')
f2 = open('file2.txt', 'w')
for line in f1:
    f2.write(line.replace('old_text', 'new_text'))
f1.close()
f2.close()

しかし、複数の単語をそれぞれの新しい単語に置き換える方法がわかりません。この例では、(old_text1,old_text2,old_text3,old_text4)のような単語を見つけて、それぞれの新しい単語(new_text1,new_text2,new_text3,new_text4)に置き換えたい場合。

前もって感謝します!

2
bikuser

Zipを使用して、チェックワードとtoReplaceワードを繰り返し処理してから、置換することができます。

例:

checkWords = ("old_text1","old_text2","old_text3","old_text4")
repWords = ("new_text1","new_text2","new_text3","new_text4")

for line in f1:
    for check, rep in Zip(checkWords, repWords):
        line = line.replace(check, rep)
    f2.write(line)
f1.close()
f2.close()
8
Rakesh

このスクリプトは、過去に使用したスクリプトよりも非常にうまく機能し、はるかに高速であることを学びました。

import re

def Word_replace(text, replace_dict):
rc = re.compile(r"[A-Za-z_]\w*")

def translate(match):
    Word = match.group(0).lower()
    print(Word)
    return replace_dict.get(Word, Word)

return rc.sub(translate, text)

old_text = open('YOUR_FILE').read()

replace_dict = {
"old_Word1" : 'new_Word1',
"old_Word2" : 'new_Word2',
"old_Word3" : 'new_Word3',
"old_Word4" : 'new_Word4',
"old_Word5" : 'new_Word5'

 }                            # {"words_to_find" : 'Word_to_replace'}

output = Word_replace(old_text, replace_dict)
f = open("YOUR_FILE", 'w')                   #what file you want to write to
f.write(output)                              #write to the file
print(output)                                #check that it worked in the console 
1
john smith
def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

私たちのメソッドreplace_all()は、2つの引数を取ります。最初のテキストは、置換が行われる文字列またはファイル(テキスト)です。 2番目のdicは、置き換えられる単語または文字をキーとして使用し、置き換えられる単語または文字をそのキーの値として使用する辞書です。この辞書は、1つの単語または文字だけを置き換える場合は1つのキーと値のペア、複数の単語または文字を一度に置き換える場合は複数のキーと値のペアを持つことができます。

複数の単語または文字を検索してPythonで置き換える

1
user9862376

テキストまたはファイルのコンテンツを、正規表現モジュールのsubに置き換えることができます(re):

def replace_content(dict_replace, target):
    """Based on dict, replaces key with the value on the target."""

    for check, replacer in list(dict_replace.items()):
        target = sub(check, replacer, target)

    return target

または、str.replaceを必要としないre import subから

def replace_content(dict_replace, target):
    """Based on dict, replaces key with the value on the target."""

    for check, replacer in list(dict_replace.items()):
        target = target.replace(check, replacer)

    return target

完全な実装は次のとおりです。

from re import sub
from os.path import abspath, realpath, join, dirname

file = abspath(join(dirname(__file__), 'foo.txt'))
file_open = open(file, 'r')
file_read = file_open.read()
file_open.close()

new_file = abspath(join(dirname(__file__), 'bar.txt'))
new_file_open = open(new_file, 'w')


def replace_content(dict_replace, target):
    """Based on dict, replaces key with the value on the target."""

    for check, replacer in list(dict_replace.items()):
        target = sub(check, replacer, target)
        # target = target.replace(check, replacer)

    return target


# check : replacer
dict_replace = {
    'ipsum': 'XXXXXXX',
    'amet,': '***********',
    'dolor': '$$$$$'
}

new_content = replace_content(dict_replace, file_read)
new_file_open.write(new_content)
new_file_open.close()

# Test
print(file_read)
# Lorem ipsum dolor sit amet, lorem ipsum dolor sit amet

print(new_content)
# Lorem XXXXXXX $$$$$ sit *********** lorem XXXXXXX $$$$$ sit amet
1
Treedbox

使いやすいreモジュール

import re
s = "old_text1 old_text2"
s1 = re.sub("old_text" , "new_text" , s)

出力

'new_text1 new_text2'

re.sub古いテキストを新しいテキストに置き換えますre.sub doc https://docs.python.org/3.7/library /re.html#re.sub

1
aman5319