2016-11-03 6 views
3

私はpythonスクリプトを書いており、可能であればFASTA形式のファイルではなく、文字列変数としてblastnに問い合わせのシーケンス情報を渡したいと思っています。文字列変数をファイルの代わりにBLAST検索に渡すことはできますか?

BiopythonのSeqIOを使用して、いくつかの転写物名をキーとして、そのシーケンスを関連値として保存しました。

だから、だから、辞書は今、私はブラストクエリおよび対象に、辞書内の配列情報に解析するこの

{'var_F': Seq('CTTCATTCTCGTTTAGCGGCTGCTCGTGGAAATTTCGAAAAAATCTGAAACTAG...TGC', SingleLetterAlphabet())} 

のように見えるこの

transcripts = dict() 
for record in SeqIO.parse("transcript_sequences.fasta", "fasta"): 
transcripts[record.name] = record.seq 

print transcripts 

ようになります。

subprocess.call("blastn -query " + transcript['var_F'] + ".txt" + " -subject " + transcript['var_B'] + " -outfmt 6 > tmp_blast.txt", shell=True) 

私はブラストのみファイルの場所のファイル名または文字列のいずれかになりますが、私はちょうどこの上の回避策があるかどうかを知りたかったのを知っています。私の最初の質問を読んで事前に

ありがとう:P BLAST用BioPythonモジュールから

答えて

2

http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc90

は、あなたがSeqIOオブジェクトをサポートしていないことbiopythonのBLASTで正しいように思われますまたは生物学的配列をBLAST関数呼び出しのパラメータとして使用するか、またはBLASTバイナリのsubprocess.call()を使用して実行します。受け入れられる入力シーケンスパラメータは、ファイル名だけです。チュートリアル:

>>> from Bio.Blast.Applications import NcbiblastxCommandline 
>>> help(NcbiblastxCommandline) 
... 
>>> blastx_cline = NcbiblastxCommandline(query="opuntia.fasta", db="nr", evalue=0.001, 
...          outfmt=5, out="opuntia.xml") 
>>> blastx_cline 
NcbiblastxCommandline(cmd='blastx', out='opuntia.xml', outfmt=5, query='opuntia.fasta', 
db='nr', evalue=0.001) 
>>> print(blastx_cline) 
blastx -out opuntia.xml -outfmt 5 -query opuntia.fasta -db nr -evalue 0.001 
>>> stdout, stderr = blastx_cline() 

したがって、唯一のオプションは、実際のFASTAファイルを入力として使用することです。一度に1つのシーケンスを照会する場合は、各シーケンスをファイルに保存する必要があります。しかし、あなたがそうする理由がない限り、私はこれに対して推奨します。 BLAST は、すべてのクエリシーケンスが同じファイル内にある場合、より高速に実行できると思います。また、あなたはBioPythonは、各クエリの結果を反復するために使用したBLAST出力を読み取ることができ、以下を参照してください上記のリンクから撮影

http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc92

例:代わりに、あなたには、いくつかの他の方法BLASTを実行した場合は

、そしてあなたがする必要があるすべては読書のためのファイルを開くことで、ファイルmy_blast.xmlに(XML形式)BLAST出力を持っている:あなたは結果の多く(すなわち、複数のクエリを持っている場合

>>> result_handle = open("my_blast.xml") 
>>> from Bio.Blast import NCBIXML 
>>> blast_record = NCBIXML.read(result_handle) 

または、シーケンス):

>>> from Bio.Blast import NCBIXML 
>>> blast_records = NCBIXML.parse(result_handle) 
だけBio.SeqIOとBio.AlignIOのように(章5および6を参照)、我々は、入力機能のペアを持って、読んで、リードは、あなたが正確に一つのオブジェクトを持っているときのためであり、解析し、解析は、 SeqRecordまたはMultipleSeqAlignmentオブジェクトを取得する代わりに、BLASTレコードオブジェクトを取得します。

何千もの結果を含むBLASTファイルが巨大な状況に対処できるように、NCBIXML.parse()はイテレータを返します。

>>> from Bio.Blast import NCBIXML 
>>> blast_records = NCBIXML.parse(result_handle) 
>>> blast_record = next(blast_records) 
# ... do something with blast_record 
>>> blast_record = next(blast_records) 
# ... do something with blast_record 
>>> blast_record = next(blast_records) 
# ... do something with blast_record 
>>> blast_record = next(blast_records) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration 
# No further records 
0

ときあなたが標準入力にFASTA形式の文字列としてシーケンスを渡すことができます。平易な英語では、イテレータは、BLASTを取得すると、各BLAST検索結果のために一つ一つを記録し、あなたがBLAST出力をステップ実行することができますblastコマンドを実行します。

query_string = '>' + record.description + '\n' + str(record.seq) 
blast_command = Bio.Blast.Applications.NcbiblastnCommandline(cmd='blastn', out=record.id + '.xml', outfmt=5, db=database_name, evalue=0.001) 
stdout, stderr = blast_command(stdin=query_string) 
関連する問題