大きなfastaファイルを解析しようとしていますが、メモリ不足エラーが発生しています。データ処理を改善するためのいくつかの提案をいただければ幸いです。現在、プログラムは名前を正しく出力しますが、ファイルを部分的に介してMemoryErrorが発生します
これがジェネレーターです
def readFastaEntry( fp ):
name = ""
seq = ""
for line in fp:
if line.startswith( ">" ):
tmp = []
tmp.append( name )
tmp.append( seq )
name = line
seq = ""
yield tmp
else:
seq = seq.join( line )
これが発信者のスタブです。この部分が機能した後、さらに追加されます
fp = open( sys.argv[1], 'r' )
for seq in readFastaEntry( fp ) :
print seq[0]
fasta形式に慣れていない人のためにここに例があります
>1 (PB2)
AATATATTCAATATGGAGAGAATAAAAGAACTAAGAGATCTAATGTCACAGTCTCGCACTCGCGAGATAC
TCACCAAAACCACTGTGGACCACATGGCCATAATCAAAAAGTACACATCAGGAAGGCAAGAGAAGAACCC
TGCACTCAGGATGAAGTGGATGATG
>2 (PB1)
AACCATTTGAATGGATGTCAATCCGACTTTACTTTTCTTGAAAGTTCCAGCGCAAAATGCCATAAGCACC
ACATTTCCCTATACTGGAGACCCTCC
各エントリは、名前などを示す ">"で始まり、次のN行はデータです。先頭に「>」が付いている次の行以外に、データの終了は定義されていません。