用另一个文件中的字符列表替换“-”,使用 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)
我尝试用文件 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)