逐行匹配并替换数据

2024-09-26 22:53:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件。带有数据的文件1

ND2D1BWP210H6P51CNODSVT-(.A1(n1),.A2(),.ZN(n2)); |2
GAO21D1BWP210H6P51CNODSVT-(.A1(n2),.A2(),.B(),.Z(n3)); |4
CKLHQD14BWP210H6P51CNODSVT-(.CPN(#),.E(1),.TE(n3),.Q(n4)); |5
ND3OPTPAD6BWP210H6P51CNODSVT-(.A1(n4),.A2(),.A3(),.ZN(n5)); |8
AN4D2BWP210H6P51CNODSVT-(.A1(n5),.A2(),.A3(),.A4(),.Z(n6)); |11

和带有数据的文件2

NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(),.S(),.Z(n9)); |4
CKLHQD16BWP210H6P51CNODSVT-(.CPN(#),.E(1),.TE(n9),.Q(n10)); |5
LHCSNQD1BWP210H6P51CNODSVT-(.CDN(n10),.D(),.E(1),.SDN(),.Q(n11)); |6
OAI21D8BWP210H6P51CNODSVT-(.A1(n11),.A2(),.B(),.ZN(n12)); |9
DCCKND16BWP210H6P51CNODSVT-(.I(n12),.ZN(n13)); |10
INVSKFD14BWP210H6P51CNODSVT-(.I(n13),.ZN(n14)); |11

我想比较file1中的last digit i.e digit after |file2如果数字匹配,我想用文件1中的(n) value 替换文件2中匹配行中的first ()

代码是我写的

x1="(n"
x2=")"
with open('file1','r') as fin: 
 for line in fin: 
   l= line[-4:] 
   z1=line.find(x1) 
   z2=line.find(x2) 
   l1=line[z1:z2] 
   print l1 
   fout =open('file2','r+') 
   for line2 in fout: 
       if "()" in line2: 
           k=line2[-4:] 
              if l==k: 
                 l=line2.replace("()",l1+")",1) 
                 fout.write(l)

代码运行良好,但我遇到的唯一问题是,如果最后一个数字匹配,它不会替换文件2中的匹配线,而是在文件2中末尾的新行中添加匹配线

我得到的输出是

NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(),.S(),.Z(n9)); |4
CKLHQD16BWP210H6P51CNODSVT-(.CPN(#),.E(1),.TE(n9),.Q(n10)); |5
LHCSNQD1BWP210H6P51CNODSVT-(.CDN(n10),.D(),.E(1),.SDN(),.Q(n11)); |6
OAI21D8BWP210H6P51CNODSVT-(.A1(n11),.A2(),.B(),.ZN(n12)); |9
DCCKND16BWP210H6P51CNODSVT-(.I(n12),.ZN(n13)); |10
INVSKFD14BWP210H6P51CNODSVT-(.I(n13),.ZN(n14)); |11
NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(n1),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(n2),.S(),.Z(n9)); |4

我想要的输出是

NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(n1),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(n2),.S(),.Z(n9)); |4
CKLHQD16BWP210H6P51CNODSVT-(.CPN(#),.E(1),.TE(n9),.Q(n10)); |5
LHCSNQD1BWP210H6P51CNODSVT-(.CDN(n10),.D(),.E(1),.SDN(),.Q(n11)); |6
OAI21D8BWP210H6P51CNODSVT-(.A1(n11),.A2(),.B(),.ZN(n12)); |9
DCCKND16BWP210H6P51CNODSVT-(.I(n12),.ZN(n13)); |10
INVSKFD14BWP210H6P51CNODSVT-(.I(n13),.ZN(n14)); |11

Tags: 文件a2a1lineten2znn12

热门问题