-1

次の名前の2つのファイルがあります。

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)

ここで、 の行をファイルのrecev行に置き換えようとして、のような検索条件を設定しました。ただし、ファイル内のすべてのフォーマットを効率的に維持しながら置き換える方法についてのアイデアを提案してください。inp1inp2if 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
4

2 に答える 2

0

あなたの質問を正しく理解したかどうかはわかりませんが、私が理解しているように、次のことを行う必要があります。

文字列のリストに inp2 ファイルのすべての行を保持します。inp1 ファイルで「recev:」で始まる行を検索します。「recev:」を含む行で「if len(lines) == 5」という条件が満たされるたびに、その行を保持リストの最初の要素に置き換えます。inp1 ファイルに "recev:" を含む行が見つかるたびに、リストの最初の要素を削除します。

于 2013-08-13T12:16:33.490 に答える
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
于 2013-08-13T12:51:25.850 に答える