2

我是 python 新手,我想从这种格式中提取数据

FBpp0143497 5 151 5 157 PF00339.22 Arrestin_N Domain 1 135 149 83.4 1.1e-23 1 CL0135
FBpp0143497 183 323 183 324 PF02752.15 Arrestin_C Domain 1 137 138 58.5 6e-16 1 CL0135
FBpp0131987 60 280 51 280 PF00089.19 Trypsin Domain 14 219 219 127.7 3.7e-37 1 CL0124

到这种格式

    FBpp0143497

5 151 Arrestin_N 1.1e-23

    FBpp0143497

183 323 Arrestin_C 6e-16

我已经编写了代码,希望它可以工作,但它不起作用,请帮助!

file = open('/ddfs/user/data/k/ktrip_01/hmm.txt','r')
rec = file.read()   
for line in rec :
         field = line.split("\t")
         print field             
         print field[:]             
         print '>',field[0]             
         print   field[1], field[2],   field[6], field[12]

hmmtext 文件是

FBpp0143497 5    151      5    157 PF00339.22  Arrestin_N        Domain     1   135   149     83.4   1.1e-23   1 CL0135   

FBpp0143497    183    323    183    324 PF02752.15  Arrestin_C        Domain     1   137   138     58.5     6e-16   1 CL0135   


FBpp0131987     60    280     51    280 PF00089.19  Trypsin           Domain    14   219   219    127.7   3.7e-37   1 CL0124
4

3 回答 3

3

要逐行遍历文件,您应该执行以下操作:

with open(fname) as file:
    for line in file:
        fields = line.split('\t')
        print(fields)          # select fields you want to print
于 2010-05-20T13:10:49.270 回答
1

使用该csv模块解析制表符分隔的字段:

import csv
filename='/ddfs/user/data/k/ktrip_01/hmm.txt'

template='''\
> {field[0]}
{field[1]} {field[2]} {field[6]} {field[12]}'''

with open(filename,"r") as f:
    csvobj=csv.reader(f,delimiter='\t')
    for field in csvobj:
        if field:
            print(template.format(field=field))

产量:

> FBpp0143497
5 151 Arrestin_N 1.1e-23 1CL0135
> FBpp0143497
183 323 Arrestin_C 6e-1
> FBpp0131987
60 280 Trypsin 127.7
于 2010-05-20T13:21:40.723 回答
0

这一行:

rec = file.read()   

将你的整个文件读入rec,换行符和所有。你可能想要这样做:

rec = file.readlines()   

这只是在 Python 中从文件中读取行的一种方法。这并不总是最好的方法,因为这会将文件的所有行加载到内存中。例如,如果您的输入文件包含 300 万行,则最好一次读取和处理每一行。

于 2010-05-20T13:12:45.860 回答