我试图使用Biopython远程爆炸大约70个200-nt序列。 我已经花了好几个小时来弄清楚为什么下面的Python脚本无法工作。
我可以使用SeqIO.read来读取仅包含一个fasta的读取文件,但是当我尝试切换到SeqIO.parse时,我在.xml保存文件中没有得到任何内容创建
有什么想法吗?
作为旁注,如果有人知道从结果中排除生物的选项语法(使用ncbi网站时可能会这样做,请告诉我。)
非常感谢您的帮助。
马特
from Bio.Blast import NCBIWWW
from Bio import SeqIO
import tkinter.filedialog as tkfd
in_file=tkfd.askopenfilename()
record = SeqIO.parse(in_file, format="fasta")
out_file = tkfd.asksaveasfilename()
save_file = open(out_file, "w")
for rec in record:
print(rec)
result_handle = NCBIWWW.qblast("blastn", "nt", rec.format("fasta"))
save_file.write(result_handle.read())
result_handle.close()
else:
save_file.close()
这是我用作测试文件的in_file的内容(我的文件的行格式设置为80 char,可能在下面丢失了,记录之间的下面显示的空间也是不在我的测试文件中):
> 165613 TAACTGCAGTGTTTTGTGTCGAGCCTTTTTTGTGCCTTTTTTATAAAGGCATAACGTTATATTTAATTGAAGAGTTTGAT TCTGGCTCAGATTGAACGCTAGCGGCATGCTTAACACATGCAAGTCGAACGGCAGCGCGGGGAGCTTGCTCCCTGGCGGC GAGTGGCGGACGGGTGAGTAATGCGTAGGAATCTACCTTG
> 165875 GGGATCTTCGGACCTCGTGCTATAAGATGAGCCTACGTCGGATTAGCTTGTTGGTGGGGTAATGGCCTACCAAGGCGACG ATCCGTAGCTGGTCTGAGAGGACGATCAGCCACACTGGGACTGAGACACGGCCCAGACTCCTACGGGAGGCAGCAGTGGG GAATATTGGACAATGGGGGAAACCCTGATCCAGCAATGCC
答案 0 :(得分:1)
你的问题是库tkinter,下一个代码运行良好(biopython).....是强制使用GUI吗?
from Bio.Blast import NCBIWWW
from Bio import SeqIO
in_file = open("input.fasta")
record = SeqIO.parse(in_file, format="fasta")
save_file = open("out_file.blast", "w")
for rec in record:
print(rec)
result_handle = NCBIWWW.qblast("blastn", "nt", rec.format("fasta"))
save_file.write(result_handle.read())
result_handle.close()
else:
save_file.close()
得到以下结果:
<?xml version="1.0"?>
<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
<BlastOutput>
<BlastOutput_program>blastn</BlastOutput_program>
<BlastOutput_version>BLASTN 2.2.31+</BlastOutput_version>
<BlastOutput_reference>Stephen F. Altschul, Thomas L. Madden, Alejandro A. Sch&auml;ffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
<BlastOutput_db>nt</BlastOutput_db>
<BlastOutput_query-ID>Query_142405</BlastOutput_query-ID>
<BlastOutput_query-def>165613</BlastOutput_query-def>
<BlastOutput_query-len>200</BlastOutput_query-len>
....
我测试了你的代码,我发现以下语句错误
record = SeqIO.parse(open(in_file), format="fasta")
因为,in_file
是string
y不是类型file