name: biopython description: “分子生物学的主要Python工具包。首选用于基于Python的PubMed/NCBI查询(Bio.Entrez)、序列操作、文件解析(FASTA、GenBank、FASTQ、PDB)、高级BLAST工作流、结构、系统发育学。对于快速BLAST,使用gget。对于直接REST API,使用pubmed-database。”
Biopython: Python中的计算分子生物学
概述
Biopython是一套全面免费的Python工具,用于生物计算。它提供序列操作、文件I/O、数据库访问、结构生物信息学、系统发育学和许多其他生物信息学任务的功能。当前版本是Biopython 1.85(发布于2025年1月),支持Python 3并需要NumPy。
何时使用此技能
在以下情况下使用此技能:
- 处理生物序列(DNA、RNA或蛋白质)
- 读取、写入或转换生物文件格式(FASTA、GenBank、FASTQ、PDB、mmCIF等)
- 通过Entrez访问NCBI数据库(GenBank、PubMed、Protein、Gene等)
- 运行BLAST搜索或解析BLAST结果
- 执行序列比对(成对或多序列比对)
- 分析PDB文件中的蛋白质结构
- 创建、操作或可视化系统发育树
- 查找序列模体或分析模体模式
- 计算序列统计(GC含量、分子量、熔化温度等)
- 执行结构生物信息学任务
- 处理群体遗传学数据
- 任何其他计算分子生物学任务
核心功能
Biopython组织成模块化的子包,每个针对特定的生物信息学领域:
- 序列处理 - Bio.Seq和Bio.SeqIO用于序列操作和文件I/O
- 比对分析 - Bio.Align和Bio.AlignIO用于成对和多序列比对
- 数据库访问 - Bio.Entrez用于编程访问NCBI数据库
- BLAST操作 - Bio.Blast用于运行和解析BLAST搜索
- 结构生物信息学 - Bio.PDB用于处理3D蛋白质结构
- 系统发育学 - Bio.Phylo用于系统发育树操作和可视化
- 高级功能 - 模体、群体遗传学、序列实用程序等
安装和设置
使用pip安装Biopython(需要Python 3和NumPy):
pip install biopython
对于NCBI数据库访问,始终设置您的电子邮件地址(NCBI要求):
from Bio import Entrez
Entrez.email = "your.email@example.com"
# 可选:API密钥以获得更高速率限制(10次请求/秒替代3次请求/秒)
Entrez.api_key = "your_api_key_here"
使用此技能
此技能提供按功能区域组织的全面文档。处理任务时,参考相关参考文档:
1. 序列处理(Bio.Seq & Bio.SeqIO)
参考: references/sequence_io.md
用于:
- 创建和操作生物序列
- 读取和写入序列文件(FASTA、GenBank、FASTQ等)
- 转换文件格式
- 从大文件中提取序列
- 序列翻译、转录和反向互补
- 处理SeqRecord对象
快速示例:
from Bio import SeqIO
# 从FASTA文件读取序列
for record in SeqIO.parse("sequences.fasta", "fasta"):
print(f"{record.id}: {len(record.seq)} bp")
# 转换GenBank为FASTA
SeqIO.convert("input.gb", "genbank", "output.fasta", "fasta")
2. 比对分析(Bio.Align & Bio.AlignIO)
参考: references/alignment.md
用于:
- 成对序列比对(全局和局部)
- 读取和写入多序列比对
- 使用替换矩阵(BLOSUM、PAM)
- 计算比对统计
- 自定义比对参数
快速示例:
from Bio import Align
# 成对比对
aligner = Align.PairwiseAligner()
aligner.mode = 'global'
alignments = aligner.align("ACCGGT", "ACGGT")
print(alignments[0])
3. 数据库访问(Bio.Entrez)
参考: references/databases.md
用于:
- 搜索NCBI数据库(PubMed、GenBank、Protein、Gene等)
- 下载序列和记录
- 获取出版物信息
- 跨数据库查找相关记录
- 批量下载,带适当速率限制
快速示例:
from Bio import Entrez
Entrez.email = "your.email@example.com"
# 搜索PubMed
handle = Entrez.esearch(db="pubmed", term="biopython", retmax=10)
results = Entrez.read(handle)
handle.close()
print(f"Found {results['Count']} results")
4. BLAST操作(Bio.Blast)
参考: references/blast.md
用于:
- 通过NCBI Web服务运行BLAST搜索
- 运行本地BLAST搜索
- 解析BLAST XML输出
- 按E值或相似性过滤结果
- 提取命中序列
快速示例:
from Bio.Blast import NCBIWWW, NCBIXML
# 运行BLAST搜索
result_handle = NCBIWWW.qblast("blastn", "nt", "ATCGATCGATCG")
blast_record = NCBIXML.read(result_handle)
# 显示前几位命中
for alignment in blast_record.alignments[:5]:
print(f"{alignment.title}: E-value={alignment.hsps[0].expect}")
5. 结构生物信息学(Bio.PDB)
参考: references/structure.md
用于:
- 解析PDB和mmCIF结构文件
- 导航蛋白质结构层次(SMCRA:结构/模型/链/残基/原子)
- 计算距离、角度和二面角
- 二级结构分配(DSSP)
- 结构叠加和RMSD计算
- 从结构中提取序列
快速示例:
from Bio.PDB import PDBParser
# 解析结构
parser = PDBParser(QUIET=True)
structure = parser.get_structure("1crn", "1crn.pdb")
# 计算α碳之间的距离
chain = structure[0]["A"]
distance = chain[10]["CA"] - chain[20]["CA"]
print(f"Distance: {distance:.2f} Å")
6. 系统发育学(Bio.Phylo)
参考: references/phylogenetics.md
用于:
- 读取和写入系统发育树(Newick、NEXUS、phyloXML)
- 从距离矩阵或比对构建树
- 树操作(修剪、重新根化、梯状化)
- 计算系统发育距离
- 创建共识树
- 可视化树
快速示例:
from Bio import Phylo
# 读取和可视化树
tree = Phylo.read("tree.nwk", "newick")
Phylo.draw_ascii(tree)
# 计算距离
distance = tree.distance("Species_A", "Species_B")
print(f"Distance: {distance:.3f}")
7. 高级功能
参考: references/advanced.md
用于:
- 序列模体(Bio.motifs) - 查找和分析模体模式
- 群体遗传学(Bio.PopGen) - GenePop文件、Fst计算、哈代-温伯格检验
- 序列实用程序(Bio.SeqUtils) - GC含量、熔化温度、分子量、蛋白质分析
- 限制性分析(Bio.Restriction) - 查找限制酶位点
- 聚类(Bio.Cluster) - K均值和层次聚类
- 基因组图(GenomeDiagram) - 可视化基因组特征
快速示例:
from Bio.SeqUtils import gc_fraction, molecular_weight
from Bio.Seq import Seq
seq = Seq("ATCGATCGATCG")
print(f"GC content: {gc_fraction(seq):.2%}")
print(f"Molecular weight: {molecular_weight(seq, seq_type='DNA'):.2f} g/mol")
一般工作流指南
阅读文档
当用户询问特定Biopython任务时:
- 识别相关模块 基于任务描述
- 读取适当的参考文件 使用Read工具
- 提取相关代码模式 并适应用户特定需求
- 组合多个模块 当任务需要时
参考文件的搜索模式示例:
# 查找特定函数信息
grep -n "SeqIO.parse" references/sequence_io.md
# 查找特定任务示例
grep -n "BLAST" references/blast.md
# 查找特定概念信息
grep -n "alignment" references/alignment.md
编写Biopython代码
编写Biopython代码时遵循以下原则:
-
明确导入模块
from Bio import SeqIO, Entrez from Bio.Seq import Seq -
设置Entrez电子邮件 当使用NCBI数据库时
Entrez.email = "your.email@example.com" -
使用适当文件格式 - 检查哪种格式最适合任务
# 常见格式: "fasta", "genbank", "fastq", "clustal", "phylip" -
正确处理文件 - 使用后关闭句柄或使用上下文管理器
with open("file.fasta") as handle: records = SeqIO.parse(handle, "fasta") -
使用迭代器处理大文件 - 避免加载所有内容到内存
for record in SeqIO.parse("large_file.fasta", "fasta"): # 一次处理一条记录 -
优雅处理错误 - 网络操作和文件解析可能失败
try: handle = Entrez.efetch(db="nucleotide", id=accession) except HTTPError as e: print(f"Error: {e}")
常见模式
模式1:从GenBank获取序列
from Bio import Entrez, SeqIO
Entrez.email = "your.email@example.com"
# 获取序列
handle = Entrez.efetch(db="nucleotide", id="EU490707", rettype="gb", retmode="text")
record = SeqIO.read(handle, "genbank")
handle.close()
print(f"Description: {record.description}")
print(f"Sequence length: {len(record.seq)}")
模式2:序列分析管道
from Bio import SeqIO
from Bio.SeqUtils import gc_fraction
for record in SeqIO.parse("sequences.fasta", "fasta"):
# 计算统计
gc = gc_fraction(record.seq)
length = len(record.seq)
# 查找ORF、翻译等
protein = record.seq.translate()
print(f"{record.id}: {length} bp, GC={gc:.2%}")
模式3:BLAST并获取前几位命中
from Bio.Blast import NCBIWWW, NCBIXML
from Bio import Entrez, SeqIO
Entrez.email = "your.email@example.com"
# 运行BLAST
result_handle = NCBIWWW.qblast("blastn", "nt", sequence)
blast_record = NCBIXML.read(result_handle)
# 获取前几位命中访问号
accessions = [aln.accession for aln in blast_record.alignments[:5]]
# 获取序列
for acc in accessions:
handle = Entrez.efetch(db="nucleotide", id=acc, rettype="fasta", retmode="text")
record = SeqIO.read(handle, "fasta")
handle.close()
print(f">{record.description}")
模式4:从序列构建系统发育树
from Bio import AlignIO, Phylo
from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor
# 读取比对
alignment = AlignIO.read("alignment.fasta", "fasta")
# 计算距离
calculator = DistanceCalculator("identity")
dm = calculator.get_distance(alignment)
# 构建树
constructor = DistanceTreeConstructor()
tree = constructor.nj(dm)
# 可视化
Phylo.draw_ascii(tree)
最佳实践
- 始终阅读相关参考文档 在编写代码前
- 使用grep搜索参考文件 以查找特定函数或示例
- 验证文件格式 在解析前
- 优雅处理缺失数据 - 并非所有记录都有所有字段
- 缓存下载数据 - 不要重复下载相同序列
- 尊重NCBI速率限制 - 使用API密钥和适当延迟
- 使用小数据集测试 在处理大文件前
- 保持Biopython更新 以获取最新功能和错误修复
- 使用适当遗传代码表 进行翻译
- 记录分析参数 以确保可重复性
故障排除常见问题
问题:“No handlers could be found for logger ‘Bio.Entrez’”
解决方案: 这只是一个警告。设置Entrez.email以抑制它。
问题:NCBI返回"HTTP Error 400"
解决方案: 检查ID/访问号是否有效且格式正确。
问题:解析文件时"ValueError: EOF"
解决方案: 验证文件格式是否与指定格式字符串匹配。
问题:比对失败,报"sequences are not the same length"
解决方案: 确保序列在比较前已对齐。
问题:BLAST搜索缓慢
解决方案: 对于大规模搜索,使用本地BLAST或缓存结果。
问题:PDB解析器警告
解决方案: 使用PDBParser(QUIET=True)以抑制警告,或调查结构质量。
附加资源
- 官方文档: https://biopython.org/docs/latest/
- 教程: https://biopython.org/docs/latest/Tutorial/
- Cookbook: https://biopython.org/docs/latest/Tutorial/(高级示例)
- GitHub: https://github.com/biopython/biopython
- 邮件列表: biopython@biopython.org
快速参考
在参考文件中定位信息时,使用这些搜索模式:
# 搜索特定函数
grep -n "function_name" references/*.md
# 查找特定任务示例
grep -n "example" references/sequence_io.md
# 查找模块的所有出现
grep -n "Bio.Seq" references/*.md
总结
Biopython提供计算分子生物学的全面工具。使用此技能时:
- 识别任务领域(序列、比对、数据库、BLAST、结构、系统发育学或高级)
- 查阅适当的参考文件 在
references/目录中 - 调整代码示例 以适应特定用例
- 组合多个模块 当复杂工作流需要时
- 遵循最佳实践 用于文件处理、错误检查和数据管理
模块化参考文档确保为每个主要Biopython功能提供详细、可搜索的信息。