我有一个包含以下数据的文件:
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')
无效的原因。但是直到上一行,它还没有问题。
答案 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')]