用另一个文件中的字符列表替换“-”,使用 python 保持位置固定

replacing '-' with a list of characters from another files keeping the position fixed using python

我尝试用文件 2 中的字符(与文件 1 中的“-”在同一位置)替换文件 1(包含多行)中的“-”。这是例子;

输入

文件 1:

--------V--------------------
--------------N----------I

文件 2:
FLDGIDKAQEEHEKYHSNWRAMASDFNL

期望输出:
FLDGIDKVQEEHEKYHSNWRAMASDFNL
FLDGIDKAQEEHEKYHNNWRAMASDFNI

现在我尝试了这些类型的代码:


f1=open("file1").read()
f2=open("file2").read()

#replace '-' with the character from file2
def replace(index_list,character,string):
    string=list(string)

    for index in index_list:
        string[index]=character
    return "".join(string)

#print the positions in file1 where '-' is there

for line in f1: 
    for i in range(0, len(line)): 
        if line[i]== '-': 
        p=i+1 
        print(replace(p,f2[p],f1))

位置 (p) 打印正常,但我无法正确替换它们。谁能帮我提供代码或其他一些选项?这真的很有帮助。非常感谢。

使用切片替换相应的字符。在下面的代码中,我使用 enumerate() 来获取字符串中包含替换字符 (i) 和字符 (c) 的索引。然后,如果该字符不是连字符,则只需获取索引左侧的子字符串 (new_line[:i]) 加上该字符加上索引右侧的子字符串,而没有所述位置的字符 (new_line[i+1:]).

使用切片的好处是您不必担心索引超出范围。例如,如果要替换的字符位于字符串的末尾(如第二个替换模式),new_line[i+1] 会生成一个空字符串,因为 i 将大于字符串中的最后一个索引.

from pathlib import Path

file1 = Path('file1.txt')
file2 = Path('file2.txt')

with file1.open('r') as f1, file2.open('r') as f2:
    f1_lines = f1.read().splitlines()
    f2_lines = f2.read().splitlines()

    for line_2 in f2_lines:
        for line_1 in f1_lines:
            new_line = line_2
            for i, c in enumerate(line_1):
                if c != '-':
                    new_line = new_line[:i] + c + new_line[i+1:]
            print(new_line)

我在cesarv的主要内容中有一个类似的解决方案,就是切片,他已经很好地解释了。我所做的只是逐步完全替换该行,然后在最后将结果写入一个新的输出文件。


f1=open("file1.txt").readlines()
f2=open("file2.txt").readlines()
f3 = open('output.txt', 'w')


for line in f1: 
    for i in range(len(line)-1):
        #print(i) 
        if line[i]== '-': 
            line = line[:i] + f2[0][i] + line[i+1:]
            #Print statement below shows progress of line getting updated.
            #print(f2[0][i], i, line)
    
    f3.write(line)

输出:

with open('file1.txt', 'r+') 作为 f1: 打开('file2.txt','r')作为 f2:

    line2, f1Lines = f2.readline(), f1.readlines()

    print(line2)
    for l in f1Lines:
        print(l)

    for line in f1Lines:
        tmp = ""

        for i in range(len(line)):

            if line[i] == '-':
                tmp += str(line2[i])
            else :
                tmp += str(line[i])

        print(tmp)