2017-09-05 16 views
1

私は遺伝子IDに従って複数のファイルに分割したいと思う大きなfastaファイルを作成しています。私はbiopythonチュートリアルから上記のスクリプトを使用しようとしています:それはそれらに93のシーケンスでファイルを分割ん大きなfastaファイルを複数のファイルに分割するためのbiopythonスクリプト

def batch_iterator(iterator, batch_size): 
    """Returns lists of length batch_size. 

    This can be used on any iterator, for example to batch up 
    SeqRecord objects from Bio.SeqIO.parse(...), or to batch 
    Alignment objects from Bio.AlignIO.parse(...), or simply 
    lines from a file handle. 

    This is a generator function, and it returns lists of the 
    entries from the supplied iterator. Each list will have 
    batch_size entries, although the final list may be shorter. 
    """ 
    entry = True # Make sure we loop once 
    while entry: 
     batch = [] 
     while len(batch) < batch_size: 
      try: 
       entry = iterator.next() 
      except StopIteration: 
       entry = None 
      if entry is None: 
       # End of file 
       break 
      batch.append(entry) 
     if batch: 
      yield batch 

record_iter=SeqIO.parse(open('/path/sorted_sequences.fa'), 'fasta') 
for i, batch in enumerate (batch_iterator(record_iter, 93)): 
    filename='gene_%i.fasta' % (i + 1) 
    with open('/path/files/' + filename, 'w') as ouput_handle: 
     count=SeqIO.write(batch, ouput_handle, 'fasta') 
    print ('Wrote %i records to %s' % (count, filename)) 

が、それは私がエラーを見ることができない93のグループごとに2つのファイルを提供しますが、私はものがあると思います。 大きなファストファイルを別の方法で分割する別の方法がありますか? おかげで

+0

「93のグループあたり2つのファイルを提供していますか? – rodgdor

+0

スクリプトは重複ファイル、すなわちgene_1を持つ93個の遺伝子の2つのファイルを生成することを示します。そして私は、それぞれの93があることを知っています。だから、最初の93シーケンスファイルを作成した後、次の93に移動する必要がありますが、私はそういうわけではありません。 – Ana

答えて

1

例では、コードを読んだ後、イテレータはファイルあたり93列遺伝子IDごとにファイルを分けるちょうどbatch_sizeのグループにおける配列のdivitionを作るので、あなたの場合にはしていないようです。

+0

それは私が思ったものです。しかし、この初心者である私は、各遺伝子が配列を持っているので、それに応じてそれを分離すると考えました。ファイルは、最初の93の配列がgene_1に対応し、次の93が別のgene.idに対応するようにソートされます。とにかく、私が好きなように彼らをセパパレートすることはできますか?ありがとう – Ana

+0

@Anaそれだけでなく、いくつかの方法があります。遺伝子の名前をすべて知っているか、最初に取得する必要があるかどうかによって異なります。次に、あなたはあなたが持っている異なる遺伝子の数(遅いプロセス)の数だけファイルを解析するか、より巧妙な方法を考えることができます。私はあなたにそれをしようとアドバイスし、ブロックされている場合は、ここで質問を投稿するか、試したコードとあなたが持っているエラーや詰まりを覚えています。 – rodgdor

+0

私は前に遺伝子を改変したので、遺伝子の名前を知っています。私はそれを行うには多くの方法があると思いますが、私はPythonでのファイル処理について多くのことを学んでいません。 – Ana

1

将来このスクリプトに興味がある人がいる場合。スクリプトは、それが完璧に動作します。問題は、私が分割しようとしていたファイルが、それより多くのシーケンスを持っていたということでした。だから私は、悪いファイルを削除し、上記のスクリプトとうまく分割された新しいものを生成します。

関連する問題