Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换文本中匹配的字符串_Python_String_Match - Fatal编程技术网

Python 替换文本中匹配的字符串

Python 替换文本中匹配的字符串,python,string,match,Python,String,Match,从作为输入的文本文件中,我需要替换在输入列表中找到的单词。 输出是相同的文本文件,但找到的单词需要替换为,例如:matached\u word。 我已经为此构建了一系列循环,但是我不能复制相同的文本文件。我尝试使用一个20行的字符串文本文件,但输出中有数百万行重复 这里有一个例子。 输入文本文件可以是: bucharest sdfsadf sofia sdf sdf dsf vienna etc etc can sdfds 22 rdf fd paris Paris 我尝试的代码是: #

从作为输入的文本文件中,我需要替换在输入列表中找到的单词。 输出是相同的文本文件,但找到的单词需要替换为,例如:
matached\u word
。 我已经为此构建了一系列循环,但是我不能复制相同的文本文件。我尝试使用一个20行的字符串文本文件,但输出中有数百万行重复

这里有一个例子。 输入文本文件可以是:

bucharest sdfsadf
sofia sdf sdf dsf 
vienna etc
etc
can
sdfds
22
rdf

fd
paris
Paris
我尝试的代码是:

# input files
input_file = r"....\input_txt_test.txt"
list_names = ["Bucharest", "bucharest", "vienna", "Paris", "buc"]
out_file = r"....\output_txt_test.txt"

# Perform replacement
with open(out_file, 'w') as outfile:
    with open(input_file, 'r') as f:
        text = f.readlines()
        for line in text:
            line_sp = line.split(" ")
            for name in list_names:
                for word in line_sp:
                    if name in word:
                        strreplace = '''<repl>%s</repl>''' % name
                        repl = line.replace(name, strreplace)
                        outfile.write(repl)
                    else:
                        outfile.write(line)
#输入文件
input_file=r“…\input_txt_test.txt”
名单名称=[“布加勒斯特”、“布加勒斯特”、“维也纳”、“巴黎”、“布加勒斯特”]
out\u file=r“…\output\u txt\u test.txt”
#更换
将打开的(out_文件,'w')作为输出文件:
打开(输入_文件,'r')作为f:
text=f.readlines()
对于文本中的行:
line_sp=line.split(“”)
对于列表中的名称\u名称:
对于第_sp行中的单词:
如果名称为word:
strreplace=''%s''%name
repl=line.replace(名称、strreplace)
outfile.write(repl)
其他:
输出文件。写入(行)
我期望这个输出:

<repl>bucharest</repl> sdfsadf
sofia sdf sdf dsf 
<repl>vienna</repl> etc
etc
can
sdfds
22
rdf

fd
paris
<repl>Paris</repl>
布加勒斯特sdfsadf
索非亚自卫队
维也纳等
等
可以
电双凸极
22
rdf
fd
巴黎
巴黎
但我得到的是:

bucharest sdfsadf
bucharest sdfsadf
<repl>bucharest</repl> sdfsadf
bucharest sdfsadf
bucharest sdfsadf
bucharest sdfsadf
bucharest sdfsadf
bucharest sdfsadf
<repl>buc</repl>harest sdfsadf
bucharest sdfsadf
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
sofia sdf sdf dsf 
vienna etc
vienna etc
vienna etc
vienna etc
<repl>vienna</repl> etc
vienna etc
vienna etc
vienna etc
vienna etc
vienna etc
etc
etc
etc
etc
etc
can
can
can
can
can
sdfds
sdfds
sdfds
sdfds
sdfds
22
22
22
22
22
rdf
rdf
rdf
rdf
rdf





fd
fd
fd
fd
fd
paris
paris
paris
paris
paris
ParisParisParis<repl>Paris</repl>Paris
布加勒斯特sdfsadf
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
布加勒斯特自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
索非亚自卫队
维也纳等
维也纳等
维也纳等
维也纳等
维也纳等
维也纳等
维也纳等
维也纳等
维也纳等
维也纳等
等
等
等
等
等
可以
可以
可以
可以
可以
电双凸极
电双凸极
电双凸极
电双凸极
电双凸极
22
22
22
22
22
rdf
rdf
rdf
rdf
rdf
fd
fd
fd
fd
fd
巴黎
巴黎
巴黎
巴黎
巴黎
帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯帕里斯
此外,我在列表名称中有“buc”字符串,但没有与该字符串匹配的单词,它仍然被插入到输出文件中。
如何执行此匹配和文件写入?谢谢

读取您的文件并将输入的单词替换为单词

yourListOfWords = ['a','b','c']
yourFile = open('PATH','r')
newFile = open('PATH_NEW','w')
yourFile.read().splitlines()

for line in yourFile:
    for word in yourListOfWords:
        newline = line.replace(word,'<rep>'+word+'</rep>')
        newFile.writelines(newline +"\n")
yourListOfWords=['a','b','c']
yourFile=open('PATH','r'))
newFile=open('PATH\u NEW','w')
yourFile.read().splitlines()
对于文件中的行:
对于单词列表中的单词:
换行符=行。替换(单词“”+单词+“”)
newFile.writelines(换行符+“\n”)

在这里,您可以阅读input.txt中每一行的
,如果您在给定的
列表名称
中找到一个单词,您可以用一个新单词替换
中的该单词。之后,将
保存到输出文件并继续检查:

# input files
input_file = r"....\input_txt_test.txt"
list_names = ["Bucharest", "bucharest", "vienna", "Paris", "buc"]
out_file = r"....\output_txt_test.txt"

# Perform replacement
with open(out_file, 'w') as outfile:
    with open(input_file, 'r') as f:
        text = f.readlines()
        for line in text:
            line_sp = line.split(" ")
            for word in line_sp:
                if word in list_names:
                    replaced_word = "<repl>{}</repl>".format(word)
                    line = line.replace(word, replaced_word)
            outfile.write(line)
#输入文件
input_file=r“…\input_txt_test.txt”
名单名称=[“布加勒斯特”、“布加勒斯特”、“维也纳”、“巴黎”、“布加勒斯特”]
out\u file=r“…\output\u txt\u test.txt”
#更换
将打开的(out_文件,'w')作为输出文件:
打开(输入_文件,'r')作为f:
text=f.readlines()
对于文本中的行:
line_sp=line.split(“”)
对于第_sp行中的单词:
如果列表中的单词名称:
替换的_word=“{}”。格式(word)
行=行。替换(单词,替换的单词)
输出文件。写入(行)

outfile.write(line)
应该是
outfile.write(word)
?我刚刚尝试了这个建议,它写了大约60行。每次比较两个单词时,你都要在输出文件中写一整行。因此,每一行都将以某种形式出现5*(字数)次。我会对f:line\u sp=line.strip()中的行执行
。拆分(“”)
,而不是
readlines
,以避免将其全部读入内存。