0

複数配列アラインメント (Clustal) ファイルがあり、このファイルを読み込んで、順序がより明確で正確に見えるように配列を配置したいと考えています。

オブジェクトを使用して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/から、このような出力が必要です。

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

Br、

このコンピューターには 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 のものと同じトリックを実行します。範囲を使用してスライスするインデックスを設定し、各スライスのアライメントでレコードを反復処理します。

于 2010-05-23T08:53:29.960 に答える