BioPython Entrez 모듈을 사용하여 this post 행의 genbank 파일 목록을 다운로드했습니다. 이후 Entrez에서 다운로드 한 genbank 파일은 게놈이 완전하지 않은 유기체에 제공된 잠정적 인 RefSeq의 일부이기 때문에 이러한 파일을 구문 분석하면 오류가 발생합니다 (NZ_CM000913.1). 이 파일을 읽으려고하면 레코드 오류가 발생하고 스크립트가 중지됩니다. 이러한 레코드를 피할 수있는 함수를 작성하려고합니다. 가장 간단한 방법은 크기별로 레코드를 필터링하는 것이지만, 파일을 레코드가 포함되어 있는지 확인한 다음 그렇지 않은 경우 제외하는 방법을 통해 '생물 - 파이썬 적으로'더 많은 작업을 수행하는 방법에 대해 궁금합니다. 현재 ValueError 메시지가 발생하지만 스크립트가 중지됩니다.생물 뱅크에서 Genbank 파일 구문 분석 오류가 발생했습니다.
#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")
내 루프를 들어 I는 다음과 같이 사용할 수 있습니다
#filter by length
for gbk in gbklist:
if len(open(gbk).readlines()) < 50:
print 'short file: exclude'
else:
process_gbk(gbk)
을하지만 바이오 파이썬 내에서 오류 메시지를 잡을 수 있을지 궁금 :
#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
가장 간단한 방법은 ValueError를 잡는 것입니다. 다르게 처리해야하는 다른 유형의 ValueError가있을 것으로 예상하지 않는 한 의미가 있습니다. 보다 견고한 솔루션은 SeqIO를 확장하고 "핸들에서 레코드를 찾을 수 없습니다"라는 메서드를 겹쳐 쓰는 것입니다. 그러면 하위 클래스 오류가 발생하고 다운 스트림을 잡을 수 있습니다. 파일 길이를 검사하는 것이 더 나은지 여부는 SeqIO 읽기 방식의 모듈 방식에 달려 있습니다 ... – Karmel