[ PROMPT_NODE_26258 ]
blast
[ SKILL_DOCUMENTATION ]
# 使用 Bio.Blast 进行 BLAST 操作
## 概述
Bio.Blast 提供了运行 BLAST 搜索(本地及通过 NCBI Web 服务)以及解析多种格式 BLAST 结果的工具。该模块处理了提交查询和解析输出的复杂性。
## 通过 NCBI Web 服务运行 BLAST
### Bio.Blast.NCBIWWW
`qblast()` 函数将序列提交给 NCBI 的在线 BLAST 服务:
python
from Bio.Blast import NCBIWWW
from Bio import SeqIO
# 从文件读取序列
record = SeqIO.read("sequence.fasta", "fasta")
# 运行 BLAST 搜索
result_handle = NCBIWWW.qblast(
program="blastn", # BLAST 程序
database="nt", # 搜索数据库
sequence=str(record.seq) # 查询序列
)
# 保存结果
with open("blast_results.xml", "w") as out_file:
out_file.write(result_handle.read())
result_handle.close()
### 可用的 BLAST 程序
- **blastn** - 核苷酸 vs 核苷酸
- **blastp** - 蛋白质 vs 蛋白质
- **blastx** - 翻译后的核苷酸 vs 蛋白质
- **tblastn** - 蛋白质 vs 翻译后的核苷酸
- **tblastx** - 翻译后的核苷酸 vs 翻译后的核苷酸
### 常用数据库
**核苷酸数据库:**
- `nt` - 所有 GenBank+EMBL+DDBJ+PDB 序列
- `refseq_rna` - RefSeq RNA 序列
**蛋白质数据库:**
- `nr` - 所有非冗余 GenBank CDS 翻译
- `refseq_protein` - RefSeq 蛋白质序列
- `pdb` - 蛋白质数据库序列
- `swissprot` - 经整理的 UniProtKB/Swiss-Prot
### 高级 qblast 参数
python
result_handle = NCBIWWW.qblast(
program="blastn",
database="nt",
sequence=str(record.seq),
expect=0.001, # E-value 阈值
hitlist_size=50, # 返回的命中数
alignments=25, # 显示的比对数
word_size=11, # 初始匹配的字长
gapcosts="5 2", # 空位代价 (开放 延伸)
format_type="XML" # 输出格式 (默认)
)
### 使用序列文件或 ID
python
# 使用 FASTA 格式字符串
fasta_string = open("sequence.fasta").read()
result_handle = NCBIWWW.qblast("blastn", "nt", fasta_string)
# 使用 GenBank ID
result_handle = NCBIWWW.qblast("blastn", "nt", "EU490707")
# 使用 GI 编号
result_handle = NCBIWWW.qblast("blastn", "nt", "160418")
## 解析 BLAST 结果
### Bio.Blast.NCBIXML
NCBIXML 为 BLAST XML 输出(推荐格式)提供了解析器:
python
from Bio.Blast import NCBIXML
# 解析单个 BLAST 结果
wi