私はBioPythonEntrezモジュールを使用して、この投稿の行に沿ってgenbankファイルのリストをダウンロードしました。その後、これらのファイルを解析すると、Entrezからダウンロードしたgenbankファイルが、ゲノムが完全ではない生物に与えられた暫定的なRefSeqの一部であるため、エラーが発生します(NZ_CM000913.1)。このファイルを読み込もうとすると、レコードエラーが発生し、スクリプトが停止します。これらのレコードを回避できる関数を作成しようとしています。最も簡単な方法は、レコードをサイズでフィルタリングすることですが、これを「バイオパイソン的に」行う方法を考えています。ファイルにレコードが含まれているかどうかをテストし、含まれていない場合は除外します。現在のValueErrorメッセージが表示されますが、スクリプトは停止します。
#the error message is something like this
from Bio import SeqIO
gbkfile = 'NZ_CM000913.1'
SeqIO.read(open(gbkfile), 'gb')
File "/usr/lib64/python2.6/site-packages/Bio/SeqIO/__init__.py", line 605, in read
raise ValueError("No records found in handle")
私のループには、次のようなものを使用できます。
#filter by length
for gbk in gbklist:
if len(open(gbk).readlines()) < 50:
print 'short file: exclude'
else:
process_gbk(gbk)
しかし、BioPython内からエラーメッセージをキャッチできるかどうか疑問に思っています。
#generate GBK-file exception
for gbk in gbklist:
try:
SeqIO.read(open(gbk),'gb')
process_gbk(gbk)
except BiopythonIO:
'this file is not a genbank file'
pass