我试图编写一个函数来计算此文件中出现的每个序列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
上面是我的代码,在调用时只返回空括号{}
所以我试图计算每个序列ID(最后13行的第二个元素)出现的次数,例如:FO203510.1发生4次。
非常感谢任何帮助,谢谢!
答案 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
看看它是否有效!