我是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
答案 0 :(得分:3)
逐行遍历文件,你应该这样做:
with open(fname) as file:
for line in file:
fields = line.split('\t')
print(fields) # select fields you want to print
答案 1 :(得分: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
答案 2 :(得分:0)
这一行:
rec = file.read()
将您的整个文件读入rec
,换行符和所有内容。你可能想这样做:
rec = file.readlines()
这只是从Python中读取文件行的一种方法。它并不总是最好的方式,因为这会将所有文件的行加载到内存中。如果你的输入文件包含三百万行,那么一次读取和处理每一行可能会更好。