我需要写一个函数,它接受一个fasta文件,并计算文件中的digram(AT、CG、TT、CC等)
我的for循环当前逐行读取文件,并生成该行的计数。然后在下一行重新开始计数。(全部编入词典)
我想保持每行的计数,所以我得到的是整个文件的计数,而不仅仅是单个行的计数
这是我试图修复的代码:
dinucleotides = ['AA','AT','AG','AC',
'TA','TT','TG','TC',
'GA','GT','GG','GC',
'CA','CT','CG','CT']
all_counts = {}
with open('short.fasta', 'r') as dna_file:
dna_file.readline()
for line in dna_file:
my_line = line.strip()
for pairs in dinucleotides:
count = my_line.count(pairs)
all_counts[pairs] = count
谢谢大家!
您可以将
collections.defaultdict
与int
一起用作default_factory
。并将
all_counts[pairs] = count
更改为all_counts[pairs] += count
或者,使用
dict.setdefault
方法一个想法是初始化一个Python dict,将每个2gram映射为零,并根据每一行递增。在这里,我假设FASQ文件只包含“ATGC”中的base。此外,对每一行的每一个可能对进行迭代需要对每一行进行16次遍历。这可以通过向前看并保存每一对来避免。或许如下:
导致
把它加到你的最后一次计数中
相关问题 更多 >
编程相关推荐