Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 - Fatal编程技术网

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'
。是指给定字符串(在本例中为
)要应用替换的次数