首页 > 解决方案 > 使用文件输入库查找和替换程序不起作用

问题描述

import fileinput

with fileinput.FileInput('FILE_PATH_ON_MY_COMPUTER', inplace=True, backup='') as file:
    for line in file:
        print(line.replace(", uh,", ""), end='')
    for line in file:
        print(line.replace(", uh", ""), end='')
    for line in file:
        print(line.replace(" uh,", ""), end='')

我正在尝试使用 fileinput 库来查找和替换 txt 文件中的匹配文本。我希望它能够查找和替换多个字符串,而不仅仅是一个。因此,我试图将它们全部放入一个程序中。但是,当我为每个打印语句(如代码所示)设置一个单独的 for 循环时,它只会替换第一个关键字。当我保留一个 for 循环并将所有打印行放在它下面时,生成的 txt 文件是一大堆垂直间隔很远的重复行。如何让程序在不失败的情况下查找和替换多个项目?我的代码中的逻辑错误是什么?

谢谢您的帮助

标签: pythonpython-3.8

解决方案


file是一个迭代器,因此您不能多次迭代它。


要么使用

from itertools import tee
file1, file2, file3 = tee(file, n=3)

或者一次性完成所有替换:

for line file:
    print(line.replace(", uh,", ""), end='').replace(", uh", ""), end='').replace(" uh,", ""), end=''))

或者(最好)使用正则表达式,如

import re
rx = re.compile(r',? uh,?')

for line in file:
    print(rx.sub('', line))

推荐阅读