0

次のようなデータを含むファイルがあります。

   1xxy
   (1gmh)

[white line]
ahdkfkbbmhkkkkkyllllkkjdttyshhaggdtdyrrrutituy
[white line]  
   __________________________________________________
   Intra Chain:
   A 32
   __________________________________________________
   PAIR 1MNS HE 10 NM A ARG 33 OX1 3.22 32
   PAIR 1MNS UR 11 NM A ARG 33 OX2 3.21 12
   PAIR IMNS UK 32 NH A ASN 43 OZ1 5.21 22
   ...
   __________________________________________________

今、私はそれを次のようにしたいと思います:

   PAIR 1MNS HE 10 NM A ARG 33 OX1 3.22 32
   PAIR 1MNS UR 11 NM A ARG 33 OX2 3.21 12
   PAIR IMNS UK 32 NH A ASN 43 OZ1 5.21 22
   ...

つまり、他のすべての文字を削除します。私は使用してみました:

inp = open('c:/users/rox/desktop/1UMG.out','r')
for line in inp:
    if not line.strip():      # to remove excess whit lines
       continue
    else:
       z = line.strip().replace('\t',' ')
       if z.startswith('PAIR'):
          print z
inp.close()

しかし、このコードは私にも出力を与えていません。なぜ機能していないのか理解できませんz.startswith('PAIR')。しかし、前の行まではうまくいっています。

4

2 に答える 2

6

で始まる行だけを見ているように見えるPAIRので、次のような単純なものを使用してみませんか。

with open('data.txt') as infp:
   for line in infp:
      line = line.strip()
      if line.startswith('PAIR'):
         print(line)

あげる:

PAIR 1MNS HE 10 NM A ARG 33 OX1 3.22 32
PAIR 1MNS UR 11 NM A ARG 33 OX2 3.21 12
PAIR IMNS UK 32 NH A ASN 43 OZ1 5.21 22

この出力は先頭の3つのスペースを削除します。必要に応じて、それらを追加し直すのは簡単です。

:を使用withすると、完了時にファイルが自動的に閉じられます。そうしないと、例外が発生します。

于 2012-06-09T03:50:26.930 に答える
0

@Levonの説明に加えて、ファイルオブジェクトはイテレータプロトコルをサポートしているため、ファイルのサイズに応じて、リスト内包表記を使用できます。

[l for l in open('test.txt') if l.startswith('PAIR')]
于 2012-06-09T05:27:27.403 に答える