1

NCBI ブラスト Web サイトへの複数のシーケンス送信によって生成された XML ファイルのリストを読み取ろうとしています。各ファイルから、特定の行の情報を出力したいと考えています。読みたいファイルにはすべて接尾辞が付けられています"_recombination.xml"

for file in glob.glob("*_recombination.xml"):
    result_handle= open(file)
    blast_record=NCBIXML.read(result_handle)
    for alignment in blast_record.alignments:
        for hsp in alignment.hsps:
            print "*****Alignment****"
            print "sequence:", alignment.title
            print "length:", alignment.length
            print "e-value:", hsp.expect
            print hsp.query
            print hsp.match
            print hsp.sbjct

スクリプトは最初に"_recombination.xml"サフィックスを持つすべてのファイルを見つけ、次に各ファイルを読み取り、特定の行を出力するようにします (これは、BioPython のクックブックからのほとんどそのままのコピーです)。しかし、次のエラーが表示されます。

Traceback (most recent call last):
File "Scripts/blast_test.py", line 202, in <module>
blast_record=NCBIXML.read(result_handle)
File "/Library/Python/2.7/site-packages/Bio/Blast/NCBIXML.py", line 576, in read
first = iterator.next()
File "/Library/Python/2.7/site-packages/Bio/Blast/NCBIXML.py", line 643, in parse
expat_parser.Parse("", True) # End of XML record
xml.parsers.expat.ExpatError: no element found: line 3106, column 7594 

何が問題なのかよくわかりません。既に読み取られているファイルをループバックしようとしているかどうかはわかりません。たとえば、ファイルを閉じると役立つようです。

for file in glob.glob("*_recombination.xml"):
    result_handle= open(file)
    blast_record=NCBIXML.read(result_handle)
    for alignment in blast_record.alignments:
        for hsp in alignment.hsps:
            print "*****Alignment****"
            print "sequence:", alignment.title
            print "length:", alignment.length
            print "e-value:", hsp.expect
            print hsp.query
            print hsp.match
            print hsp.sbjct
    result_handle.close()
    blast_record.close()

しかし、それはまた私に別のエラーを与えます:

Traceback (most recent call last): 
File "Scripts/blast_test.py", line 213, in <module> blast_record.close() 
AttributeError: 'Blast' object has no attribute 'close'
4

2 に答える 2