创建一个字典来计算序列 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
看看有没有用!
我正在尝试编写一个函数来计算此文件(这是一个示例 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
看看有没有用!