我试图使用python解析对齐输出文件,但我遇到了一些问题。
该文件有三个主要"块"信息,我想得到第三个块值,具有这种结构:
I J ILEN JLEN MATCH NGAPS NALIG NIDENT %IDENT NAS NASAL NRANS RMEAN STDEV SCORE
1 2 177 104 433.00 7 104 20 19.23 416.35 335.58 0 0.00 0.00 0.00 1
1 3 177 107 427.00 6 107 21 19.63 399.07 331.78 0 0.00 0.00 0.00 2
1 4 177 126 480.00 4 126 15 11.90 380.95 342.86 0 0.00 0.00 0.00 3
所以我写了这个:
infile=open('ig_pairs.out')
init=infile.readline()
while init[:6] !=' 1542':
line=infile.readline()
colnames=['I', 'J', 'ILEN', 'JLEN', 'MATCH', 'NGAPS', 'NALIG', 'NIDENT', '%IDEN$
file=open('ig_file.txt', 'w')
for c in colnames:
file.write(c + '\t')
for line in infile.readline():
I=line[5:7]
J=line[9:11]
ILEN=line[14:16]
JLEN=line[19:21]
MATCH=line[26:31]
NGAPS=line[37:38]
NALIG=line[43:45]
NIDENT=line[50:52]
IDEN=line[58:62]
NAS=line[68:72]
NASAL=line[77:82]
NRANS=line[87:89]
RMEAN=line[93:99]
STDEV=line[105:109]
SCORE=line[114:119]
NUMBER=line[120:126]
file.write('\n' + I + '\t' + J + '\t' + ILEN + '\t' + JLEN + '\t' + MATCH + '\t' + NGAPS + '\t' + NALIG + '\t' + NIDENT + '\t' + IDEN + '\t' + NAS + '\t' + NASAL + '\t' + NRANS + '\t' + RMEAN + '\t' + STDEV + '\t' + SCORE + '\t' + NUMBER)
file.close()
但由于某种原因,它无法正常工作。我没有收到任何错误消息,终端刚被阻止,没有任何反应。
知道什么是错的?
答案 0 :(得分:2)
这似乎创造了一个无限循环:
while init[:6] !=' 1542':
line=infile.readline()
您需要重置init变量,否则总是可以评估为true。
将line = infile.readline()
更改为init = infile.readline()
。
答案 1 :(得分:1)
我想问题出在:
for line in infile.readline()
你只阅读一行而不是所有行,因此line
将是一个字符而不是一行,因为python会认为你在字符上进行迭代。
因此line[5:7]
不会成为任何事情。
使用
for line in infile.readlines()