用Python替换文件中的文本


问题内容

我是Python的新手。我希望能够打开一个文件,并通过Python用给定的替换项替换某些单词的每个实例。例如,假设将每个单词“零”替换为“
0”,将“临时”替换为“ bob”,然后将“垃圾”替换为“无”。

我首先开始使用它:

for line in fileinput.input(fin):
        fout.write(line.replace('zero', '0'))
        fout.write(line.replace('temp','bob'))
        fout.write(line.replace('garbage','nothing'))

但我认为这不是实现这一目标的正确方法。然后,我考虑过要执行if语句来检查该行是否包含这些项,如果包含,则替换该行包含的项,但是据我所知,这也不是一个理想的解决方案。我想知道最好的方法是什么。提前谢谢!


问题答案:

这应该做

replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'}

with open('path/to/input/file') as infile, open('path/to/output/file', 'w') as outfile:
    for line in infile:
        for src, target in replacements.iteritems():
            line = line.replace(src, target)
        outfile.write(line)

编辑
:要解决Eildosa的评论,如果您要执行此操作而不写另一个文件,那么最终将不得不将整个源文件读入内存:

lines = []
with open('path/to/input/file') as infile:
    for line in infile:
        for src, target in replacements.iteritems():
            line = line.replace(src, target)
        lines.append(line)
with open('path/to/input/file', 'w') as outfile:
    for line in lines:
        outfile.write(line)

编辑: 如果您使用的是Python
3.x,请使用replacements.items()代替replacements.iteritems()