簡體   English   中英

使用Clustal從每行打印50個序列

[英]Print 50 sequences from each line using Clustal

我有一個多序列比對(Clustal)文件,我想閱讀此文件並以使序列看起來更清晰准確的方式排列序列。

我正在使用AlignIO對象從Biopython進行此AlignIO

alignment = AlignIO.read("opuntia.aln", "clustal")

print "Number of rows: %i" % len(align)

for record in alignment:
    print "%s - %s" % (record.id, record.seq)

我的輸出看起來很亂,長時間滾動。 我想做的是每行僅打印50個序列,並繼續直到比對文件結束。

我希望從http://www.ebi.ac.uk/Tools/clustalw2/獲得類似的輸出。

您是否需要比簡單地將record.seq分成50個字符的塊更復雜的東西,還是我錯過了什么?

您可以使用Python序列切片輕松實現這一點。 seq[N:N+50]訪問以N開頭的50個序列元素:

In [24]: seq = ''.join(str(random.randint(1, 4)) for i in range(200))

In [25]: seq
Out[25]: '13313211211434211213343311221443122234343421132111223234141322124442112343143112411321431412322123214232414331224144142222323421121312441313314342434231131212124312344112144434314122312143242221323123'

In [26]: for n in range(0, len(seq), 50):
   ....:     print seq[n:n+50]
   ....:     
   ....:     
13313211211434211213343311221443122234343421132111
22323414132212444211234314311241132143141232212321
42324143312241441422223234211213124413133143424342
31131212124312344112144434314122312143242221323123

我在這台計算機上沒有biopython,因此未經測試,但應該可以正常工作:

chunk_size = 50

for i in range(0, alignment.get_alignment_length(), chunk_size):
    print ""
    for record in alignment:
        print "%s\t%s %i" % (record.name,  record.seq[i:i + chunk_size], i + chunk_size)

做與Eli相同的技巧-使用范圍設置索引以切片,然后在每個切片的對齊方式中迭代記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM