仅在满足特定条件时才覆盖文件中的几行

时间:2013-08-13 12:00:38

标签: python string-formatting file-handling

我有两个名为的文件:

INP1:

recev: Na Sod B 1    
                accept: F Fluorin B 91           R-A = 12.44 
                        I Iodin  C 22            R-A = 22.11 
                        Cl chlorine D 21         R-A = 24.21  

recev: Mg Mag C 3 
                accept: F Fluorin B 82          R-A = 91.00
                        Mn Mangan C 23          R-A = 12.30
...(100+ lines)

INP2:

recev: Na Sod B 1   H-atom: H Hydrogen D 2  
recev: Mg Mag C 3   H-atom: H Hydrogen N 3  
...(100+lines)

现在,我尝试将recevinp1替换为inp2文件中的行,其中包含if len(lines) == 5 : (then replace)等搜索条件。但请提出任何建议,了解如何有效地维护inp1文件中的所有格式。

期望的结果:

recev: Na Sod B 1  H-atom: H Hydrogen D 2  
             accept: F Fluorin B 91           R-A = 12.44 
                     I Iodin  C 22            R-A = 22.11 
                     Cl chlorine D 21         R-A = 24.21  

recev: Mg Mag C 3  H-atom: H Hydrogen N 3
             accept: F Fluorin B 82          R-A = 91.00
                     Mn Mangan C 23          R-A = 12.30

2 个答案:

答案 0 :(得分:0)

不确定我是否理解了您的问题,但据我了解您必须执行以下操作:

将inp2文件的每一行保留在字符串列表中。在inp1文件中搜索以“recev:”开头的行。每次如果包含“recev:”的行满足条件“if len(lines)== 5”,则将该行替换为保留列表的第一个元素。每次在inp1文件中找到包含行的“recev:”时,删除列表的第一个元素。

答案 1 :(得分:0)

未完全优化但这应该有效

 #!/usr/bin/python
 import re
 with open('inp1') as f1, open('inp2') as f2:
     inp1 = f1.readlines()
     inp2 = f2.readlines()

 dict1 = {l.split('   ')[0] : l.split('   ')[1] for l in inp2}

 for line in inp1:
     line = line.rstrip()
     if re.match('recev:',line):
          if dict1.has_key(line):
              line = ' '.join([line, dict1[line].rstrip()])
     print line #write this line to file