Python按顺序替换列表中文件中的引用
假设我有这个文件:Python按顺序替换列表中文件中的引用,python,Python,假设我有这个文件: Hi Hello Hello Hello Hi Hello Hi Hi 我想用列表中的事件替换文件中的单词“Hi” 假设我有这个列表:[“好”、“不”、“是”] 我想先用“Ok”替换“Hi”,然后用“No”替换第二次出现的“Hi”,依此类推 以下是我尝试过的: with open('myfile.extension') as f: for line in f: new_line = line.replace('Hi' , 'No', 1)
Hi
Hello
Hello
Hello
Hi
Hello
Hi
Hi
我想用列表中的事件替换文件中的单词“Hi”
假设我有这个列表:[“好”、“不”、“是”]
我想先用“Ok”替换“Hi”,然后用“No”替换第二次出现的“Hi”,依此类推
以下是我尝试过的:
with open('myfile.extension') as f:
for line in f:
new_line = line.replace('Hi' , 'No', 1)
print(new_line)
我知道这不会起作用,但即使这会将所有“Hi”事件替换为“No”,而不仅仅是第一次出现
为什么?您可以将
iter
与next
一起使用:
import re, itertools
c = itertools.cycle(["Ok","No","Yes"])
result = re.sub('Hi', lambda _:next(c), open('filename.txt').read())
输出:
Ok
Hello
Hello
Hello
No
Hello
Yes
Ok
您需要跟踪下一步需要使用的更换件,您可以使用计数器:
counter = 0
replacements = ["Ok", "No", "Yes"]
with open('path/to/file.txt') as f:
for line in f:
if 'Hi' in line:
line = line.replace('Hi', replacements[counter % len(replacements)])
counter += 1
print(line.strip())
输出
Ok
Hello
Hello
Hello
No
Hello
Yes
Ok
通过使用:
new_line = line.replace('Hi' , 'No', 1)
您总是将'Hi'
替换为'No'
。是指给定字符串(在本例中为行
)要应用替换的次数