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 でファイルから行を読み取る 1 つの方法にすぎません。ファイルのすべての行がメモリに読み込まれるため、常に最適な方法とは限りません。たとえば、入力ファイルに 300 万行が含まれている場合は、各行を一度に 1 つずつ読み取って処理する方がよい場合があります。

于 2010-05-20T13:12:45.860 に答える