使用python从文件中读取特定行

时间:2012-06-09 03:45:07

标签: python

我有一个包含以下数据的文件:

   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')无效的原因。但是直到上一行,它还没有问题。

2 个答案:

答案 0 :(得分: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将自动为您关闭文件,或遇到异常。

答案 1 :(得分:0)

除了@Levon的解释之外,由于文件对象支持迭代器协议,并且根据文件的大小,可以使用列表推导:

[l for l in open('test.txt') if l.startswith('PAIR')]