创建一个字典来计算序列 ID 的出现次数

Creating a dictionary to count the number of occurrences of Sequence IDs

我正在尝试编写一个函数来计算此文件(这是一个示例 blast 文件)中出现的每个序列 ID 的数量

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

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

以上是我的代码,调用时只是 returns 空括号 {}

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

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

也许这就是您想要的:

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"))

这很适合 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

看看有没有用!