2012-06-27 27 views
1

我有一個包含數千個fasta格式DNA序列的文件,我需要 計算多少次100個單獨的短序列(motif)發生在較大的文件中。到目前爲止,我一直以motif爲主題,但我無法弄清楚如何得到我的輸出總結,以便我沒有成千上萬的值列。同時輸入所有圖案並返回表格也是非常好的。我對編碼非常陌生,非常感謝任何反饋! 我有;如何總結迭代計數,也從單個查詢移動到許多並創建表格輸出

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

我想我並不真的需要Biopython這個作爲主題將在 序列名稱沒有命中。那麼我可以做一個只讀行(...)的迭代器嗎?

我的輸入是類似的;

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

在像這樣csv文件的基序;

ACCGAATTTAAA,AAATTATAAAA,GCCCTAAAAAG 

回答

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 

你可以這樣做當然沒有圖書館。但是手頭上有圖書館,爲什麼還要重新發明輪子?

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) 
相關問題