Python 3.x 创建字典以统计序列ID的出现次数
我正在尝试编写一个函数来计算这个文件中出现的每个序列ID的数量。这是一个示例blast文件 上面的图片是我正在处理的输入文件Python 3.x 创建字典以统计序列ID的出现次数,python-3.x,dictionary,counting,Python 3.x,Dictionary,Counting,我正在尝试编写一个函数来计算这个文件中出现的每个序列ID的数量。这是一个示例blast文件 上面的图片是我正在处理的输入文件 def count_seq(input): dic1={} count=0 for line in input: if line.startswith('#'): continue if line.find('hits found'): line=line.split('\t')
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
上面是我的代码,调用时只返回空括号{}
所以我试图计算最后13行中的第二个元素sequence IDs出现的次数,例如: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"))
也许这就是你想要的:
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
看看它是否有效 这是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
看看它是否有效 在这里,文本比图像更受欢迎。人们喜欢在你的数据上复制/粘贴和测试他们的解决方案。哦,对了,谢谢你让我知道,我没有想到这一点,也没有意识到这会是一个问题!在这里,文本比图像更受欢迎。人们喜欢在你的数据上复制/粘贴和测试他们的解决方案。哦,对了,谢谢你让我知道,我没有想到这一点,也没有意识到这会是一个问题!这就是我想做的,谢谢!我的脑子还在想着循环和字典!这就是我想做的,谢谢!我的脑子还在想着循环和字典!