0

我有一个多序列比对(Clustal)文件,我想阅读这个文件并以这样一种方式排列序列,使其看起来更清晰、更精确。

我正在使用一个AlignIO对象从 Biopython 执行此操作:

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/

4

2 回答 2

0

您是否需要比简单地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
于 2010-05-22T13:37:31.930 回答
0

溴,

我在这台计算机上没有 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 相同的技巧 - 使用 range 设置要切片的索引,然后迭代每个切片对齐中的记录。

于 2010-05-23T08:53:29.960 回答