使用biopython解析fasta文件以计算属于每个ID的数字序列读取

时间:2015-07-21 13:43:43

标签: python parsing biopython fasta

我是python编程的新手,并试图解析一个fasta文件并计算文件中每个ID的读取次数(在这里使用玩具示例,但计划用于宏基因组seq文件,每个读取1-100,000个学科)。我想要获得的输出将是一个类似的文本文件:

while((read = in.readLine()) != null).

通过biopython cookbook和其他帖子中提供的示例,我已经能够拼凑出以下代码,这些代码将生成读取长度的描述性统计信息,并为我提供单个读取的SampleID和读取长度,但是我似乎无法理解如何最好地计算每个ID在文件中显示的次数,并如上所述格式化输出(使用分隔样本和制表符字段的制表符)。我到目前为止编写的代码是:

Total reads: 8
Mean read length: 232.5
Median: 234.5
Mode: 250
Max: 250
Min: 209

Sample   Count
001-00   1
002-00   4
003-00   3
Etc.

但这当然会给出阅读长度而不是计数。任何关于如何解决这个问题的想法都会受到高度赞赏(就像我迄今所写的关于公然无效率的任何想法一样)。

1 个答案:

答案 0 :(得分:1)

你可能只有一个字典ID - >迭代次数并在迭代记录时更新它。另外,我认为你可以删除:

generator = SeqIO.parse("test_fasta.fasta","fasta")

行,因为您已经拥有records列表。您也可以更改该行:

sizes = [len(rec) for rec in SeqIO.parse("test_fasta.fasta", "fasta")]

为:

sizes = [len(rec) for rec in records]

所以你只需解析一次fasta文件。

我会添加到您的代码中:

occurrences_dict = {}
for seqrecord in records:
    idkeep, rest = seqrecord.id.split(';',1)
    occurrences_dict[idkeep] = occurrences_dict.get(idkeep, 0) + 1

然后您可以打印每个ID出现的次数:

for k in occurrences_dict:
    print k, occurrences_dict[k]