1

我有一个包含数千个 fasta 格式的 DNA 序列的文件,我需要计算在较大文件中出现了多少次 100 个单独的短序列(基序)。到目前为止,我一直在逐个主题地做主题,但我不知道如何对我的输出求和,这样我就没有一列包含数千个值的列。一次输入所有图案并获得一张桌子也很棒。我对编码非常陌生,并感谢任何反馈!我有;

from Bio import SeqIO
for i in SeqIO.parse(f,'fasta'):
   print i.seq.count('motif')

我在想我真的不需要 Biopython,因为这些图案不会出现在序列名称中。那么我可以做一个只逐行读取(...)的迭代器吗?

我的输入是这样的;

>fasta1
AACTGGGGTCCGTCGATAATATAGGATAG...
>fasta2
GCGCGTGATAGATATGATTAGCGGCGCAA...

ETC

像这样在 csv 文件中使用图案;

ACCGAATTTAAA,AAATTATAAAA,GCCCTAAAAAG
4

2 回答 2

0

如果您排除解析,您将不得不选择:逐行处理文件或首先将其作为一个整体读取。这两种方法都可能有严重的缺点:

如果您逐行阅读和计数,您将不会检测到用换行符截取的图案;

如果您一次在字符串中读取它并删除所有换行符 ( \n),则可能会耗尽内存,具体取决于文件大小和可用 RAM。

无论哪种方式,假设您已经从 csv 读取了您的主题序列:

#let's say `motifs` is a list of motif sequences
counts = [0] * len(motifs)
for s in SeqIO.parse(f,'fasta'):
    for i, motif in enumerate(motifs):
        counts[i] += s.seq.count(motif)
于 2012-06-27T20:51:26.313 回答
0
from Bio import SeqIO

sum = 0
for i in SeqIO.parse(f,'fasta'):
    sum += i.seq.count('motif')

print sum

如果要计算多个文件名如下的文件:fasta1, fasta2, ... fastaN

from Bio import SeqIO

sum_table

for k in range(N): 
    sum = 0   
    for i in SeqIO.parse(f,'fasta'+str(k+1)):
        sum += i.seq.count('motif')
    sum_table.append(sum)

print sum_table

当然,您可以在没有库的情况下执行此操作。但是有了图书馆,为什么还要重新发明轮子呢?

于 2012-06-27T20:46:25.727 回答