创建字典以计算序列ID的出现次数

时间:2016-04-06 15:25:28

标签: python-3.x dictionary counting

我试图编写一个函数来计算此文件中出现的每个序列ID的数量(它是一个样本文件)

enter image description here

上面的图片是我正在处理的输入文件。

def count_seq(input):
    dic1={}
    count=0
    for line in input:
        if line.startswith('#'):
        continue
    if line.find('hits found'):
        line=line.split('\t')
        if line[1] in dic1:
            dic1[line]+=1
        else:
            dic1[line]=1
return dic1

上面是我的代码,在调用时只返回空括号{}

所以我试图计算每个序列ID(最后13行的第二个元素)出现的次数,例如:FO203510.1发生4次。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

也许这就是你之后的事情:

def count_seq(input_file):
    dic1={}
    with open(input_file, "r") as f:
        for line in f:
            line = line.strip()
            if not line.startswith('#'):
                line = line.split()
                seq_id = line[1]
                if not seq_id in dic1:
                    dic1[seq_id] = 1
                else:
                    dic1[seq_id] += 1

    return dic1

print(count_seq("blast_file"))

答案 1 :(得分:2)

这是 collections.defaultdict 的合适案例。设f为文件对象。假设序列在第二列中,则只显示几行代码。

from collections import defaultdict
d = defaultdict(int)
seqs = (line.split()[1] for line in f if not line.strip().startswith("#"))
for seq in seqs:
    d[seq] += 1

看看它是否有效!