使用Python解析文件

时间:2014-03-16 17:02:23

标签: python parsing

我试图使用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()

但由于某种原因,它无法正常工作。我没有收到任何错误消息,终端刚被阻止,没有任何反应。

知道什么是错的?

2 个答案:

答案 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()