使用Python将文件中的多个字符串替换为字典中的值

使用Python将文件中的多个字符串替换为字典中的值,python,Python,我有一个文件,内容如下,我想替换feed-1/feed-2。。。使用文件中字典中的相应键值。我尝试使用fileread替换,但多次替换它的值 No.of documents in collection{col_id="feed-2"} 620 No.of documents in collection{col_id="feed-3"} 630 No.of documents in collection{col_id="feed-4"} 650 No.of documents in col

我有一个文件,内容如下,我想替换feed-1/feed-2。。。使用文件中字典中的相应键值。我尝试使用fileread替换,但多次替换它的值

No.of documents  in collection{col_id="feed-2"} 620
No.of documents  in collection{col_id="feed-3"} 630
No.of documents  in collection{col_id="feed-4"} 650
No.of documents  in collection{col_id="feed-5"} 670
我有一本字典,内容如下

dict={'feed-1': 'important', 'feed-2': 'low', 'feed-3': 'critical', 'feed-4':'medium', 'feed-5':'low'}

在下面的解决方案中,我将a.txt作为输入文件,其中包含问题中给出的文本,b.txt是输出文件

#!/usr/bin/python3

dict={'feed-1': 'important', 'feed-2': 'low', 'feed-3': 'critical', 'feed-4':'medium', 'feed-5':'low'}

fout = open("b.txt", "wt")

with open("a.txt") as fp:
    line = fp.readline()
    while line:
        for k, v in dict.items():
            line = line.replace(k, v)

        print(line)
        fout.write(line)
        line = fp.readline()

fout.close()
代码执行后b.txt的内容如下

No.of documents  in collection{col_id="low"} 620
No.of documents  in collection{col_id="critical"} 630
No.of documents  in collection{col_id="medium"} 650
No.of documents  in collection{col_id="low"} 670

这个班轮应该可以

re.sub(rf"({'|'.join(dict.keys())})", lambda m: rf"{dict[m.group(1)]}", text)
这就是它的作用:

>>> text = """
... No.of documents  in collection{col_id="feed-2"} 620
... No.of documents  in collection{col_id="feed-3"} 630
... No.of documents  in collection{col_id="feed-4"} 650
... No.of documents  in collection{col_id="feed-5"} 670
... """
>>> dict={'feed-1': 'important', 'feed-2': 'low', 'feed-3': 'critical',
...       'feed-4':'medium', 'feed-5':'low'}
>>> 
>>> r =re.sub(f"({'|'.join(dict.keys())})", lambda m: f"{dict[m.group(1)]}", text)
>>> print(r)

No.of documents  in collection{col_id="low"} 620
No.of documents  in collection{col_id="critical"} 630
No.of documents  in collection{col_id="medium"} 650
No.of documents  in collection{col_id="low"} 670

>>> 

您不需要像@RishabhHardas那样调用2次来打开文件进行读写。您可以使用一条语句来执行此操作:使用
r+
标志以及
seek(0)
truncate()
的组合来删除文件的旧内容,例如:

d={'feed-1':'important','feed-2':'low','feed-3':'critical','feed-4':'medium','feed-5':'low'}
以open('text.txt','r+')作为文件:
content=file.read()
对于d.项()中的k,v:
内容=内容。替换(k,v)
file.seek(0)
file.truncate()文件
file.write(内容)
产出:

No.of documents  in collection{col_id="low"} 620
No.of documents  in collection{col_id="critical"} 630
No.of documents  in collection{col_id="medium"} 650
No.of documents  in collection{col_id="low"} 670

另外,您不应该使用
dict
作为变量名,这是一个保留的python关键字。

如果这是文件i/o的问题,让我们看看您用来读取和写入文件更改的代码。一切正常,但在运行上述脚本后,我看到如下输出:集合中的文档数{col u id=“low”}620集合中的文档数{colu id=“critical”}630集合中的文档数{colu id=“medium”}650集合中的文档数{colu id=“low”}670{col\u id=“feed-5”}我不确定最后一行为什么保持这样。@balav,这是我的错误,我没有调用
file.truncate()
因此,如果文件的新内容比旧内容短,则文件末尾将显示旧文件的部分内容。现在已经修好了,请看更新。非常感谢marcos,我刚刚在线计算出来。无论如何,非常感谢您的更正