查找并替换python文件中的多个单词

查找并替换python文件中的多个单词,python,replace,find,Python,Replace,Find,我从中获取了示例代码 但我不知道如何用相应的新词替换多个词。在这个例子中,如果我想找到一些像(old_text1,old_text2,old_text3,old_text4),并用相应的新词(new_text1,new_text2,new_text3,new_text4) 提前谢谢 这是一个易于使用的模块 import re s = "old_text1 old_text2" s1 = re.sub("old_text" , "new_text" , s) 输出 '新文本1新文本2' re.s

我从中获取了示例代码

但我不知道如何用相应的新词替换多个词。在这个例子中,如果我想找到一些像
(old_text1,old_text2,old_text3,old_text4)
,并用相应的新词
(new_text1,new_text2,new_text3,new_text4)


提前谢谢

这是一个易于使用的模块

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

'新文本1新文本2'

re.sub用新文本替换旧文本
re.sub doc

您可以使用
zip
重复检查检查单词并替换单词,然后替换

Ex:

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()
我们的方法replace_all()接受两个参数。第一个文本是替换将发生的字符串或文件(它的文本)。第二个是dic,它是一个字典,将要替换的单词或字符作为键,替换的单词或字符作为键的值。如果您只想替换一个单词或字符,则此词典只能有一个key:value对;如果您想同时替换多个单词或字符,则可以有多个key:value对


我了解到,这个脚本工作得非常好,比我过去使用的脚本快得多

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 

您可以使用正则表达式模块(re)中的sub替换文本或文件的内容:

或者只需使用str.replace,它不需要从重新导入子项

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
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

python3@bikuserre.sub的dict.items()以前曾多次被建议使用。你的答案有什么不同?嗨,T先生,我认为不同之处在于如何使用dict并将其转换为列表(dict.items()),以替换多个单词并提供可重复使用的内容。这会逐行处理文件,因此对于大文件来说可能非常节省内存。但是它也有缺点,不能替换跨多行的单词,就像简单使用
sed
一样。
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