繁体   English   中英

用列表中的元素替换包含某个字符的所有行,迭代输入中每一行的每个元素

[英]Replace all lines containing a certain character with elements from a list, iterating through each element for each line in input

好的,所以我有一个输入文件,其中包含一些我想用不同的行替换的行(使用 python)。 例如,输入文件中第一次出现的包含 H 的行被另一个文件(称为 x)的第一行替换,输入文件中第二次出现的包含 H 的行被替换为x 文件等。 包含 H 的行的出现次数与另一个文件 (x) 中的行数相同。 这是我到目前为止所拥有的:

original = open('PROJECT-pos-1.xyz', 'r')
output = open('output.txt', 'w')
list1 = open('H.txt', 'r')

terms = list1.readlines()



text = original.read()

for term in terms:
        text = text.replace('H', term, 1)

    output.write(text)

original.close()
output.close()
list1.close()

在此示例中,H.txt 是包含替换列表的文件,POSITION 文件是包含要替换的行的文件。 任何帮助深表感谢。

有两种明显的方法可以做到这一点:

方法 1 :将文件 H 的内容作为列表读取,然后继续获取列表H[0]的第一个元素,同时使用H.pop(0)减少列表。

方法 2 :类似于方法 1。将文件 H 的内容作为列表读取,然后有一个计数器i随着每次替换而增加,这样您就可以调用H[i]

我更喜欢方法2...

这是一个示例(带有列表而不是文件):

input = ['Hello', 'World', 'How', "Are", "You"]
terms = ['dog', 'cat', 'mouse']
output = []

print('input:', input)

i = 0
for w in input:
    # loop through the input
    if w[0]=='H':
        output.append(terms[i])
        i = i + 1
        if i >= len(terms):
            # reset counter if not enough terms
            i = 0
    else:
        output.append(w)

print('output:', output)

结果:

input: ['Hello', 'World', 'How', 'Are', 'You']
output: ['dog', 'World', 'cat', 'Are', 'You']

OP 可以将其从列表修改为文件 readlines。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM