首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Clustal打印每行的50个序列

使用Clustal打印每行的50个序列
EN

Stack Overflow用户
提问于 2010-05-22 21:27:52
回答 2查看 176关注 0票数 0

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

我在Biopython中使用AlignIO对象执行此操作:

代码语言:javascript
复制
alignment = AlignIO.read("opuntia.aln", "clustal")

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

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

My output看起来乱七八糟,滚动起来很长。我想要做的是在每行中只打印50个序列,并一直打印到比对文件的末尾。

我希望从http://www.ebi.ac.uk/Tools/clustalw2/输出like this

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-23 16:53:30

Br

我在这台电脑上没有biopython,所以这没有经过测试,但它应该可以工作:

代码语言:javascript
复制
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的one相同的功能-使用range设置一个索引以开始切片,然后在对齐中迭代每个切片的记录。

票数 0
EN

Stack Overflow用户

发布于 2010-05-22 21:37:32

您是否需要比简单地将record.seq分解为50个字符的块更复杂的东西,或者我遗漏了什么?

您可以使用Python序列切片非常容易地实现这一点。seq[N:N+50]访问以N开头的50个序列元素:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2888257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档