Pysam基因组文件处理工具Skill pysam

Pysam是一个用于处理基因组文件的Python模块,支持读写SAM/BAM/CRAM比对文件、VCF/BCF变异文件和FASTA/FASTQ序列文件,用于下一代测序(NGS)数据分析、覆盖度计算和生物信息学工作流。关键词:基因组、Python、生物信息学、NGS、数据分析、文件处理、变异分析。

基因工程 0 次安装 0 次浏览 更新于 3/16/2026

name: pysam description: “基因组文件工具包。读写SAM/BAM/CRAM比对文件、VCF/BCF变异文件、FASTA/FASTQ序列文件,提取区域,计算覆盖度,用于NGS数据处理管道。”

Pysam

概述

Pysam 是一个用于读取、操作和写入基因组数据集的Python模块。通过Pythonic接口到htslib,读写SAM/BAM/CRAM比对文件、VCF/BCF变异文件和FASTA/FASTQ序列文件。查询tabix索引文件,执行覆盖度的pileup分析,并运行samtools/bcftools命令。

何时使用此技能

此技能应在以下情况下使用:

  • 处理测序比对文件(BAM/CRAM)
  • 分析遗传变异(VCF/BCF)
  • 提取参考序列或基因区域
  • 处理原始测序数据(FASTQ)
  • 计算覆盖度或读取深度
  • 实现生物信息学分析管道
  • 测序数据的质量控制
  • 变异调用和注释工作流

快速入门

安装

# Pysam 通常通过 conda 或 pip 安装
# conda install -c bioconda pysam
# pip install pysam

基本示例

读取比对文件:

import pysam

# 打开 BAM 文件并获取区域内的读取
samfile = pysam.AlignmentFile("example.bam", "rb")
for read in samfile.fetch("chr1", 1000, 2000):
    print(f"{read.query_name}: {read.reference_start}")
samfile.close()

读取变异文件:

# 打开 VCF 文件并迭代变异
vcf = pysam.VariantFile("variants.vcf")
for variant in vcf:
    print(f"{variant.chrom}:{variant.pos} {variant.ref}>{variant.alts}")
vcf.close()

查询参考序列:

# 打开 FASTA 并提取序列
fasta = pysam.FastaFile("reference.fasta")
sequence = fasta.fetch("chr1", 1000, 2000)
print(sequence)
fasta.close()

核心能力

1. 比对文件操作(SAM/BAM/CRAM)

使用 AlignmentFile 类来处理比对好的测序读取。这适用于分析映射结果、计算覆盖度、提取读取或质量控制。

常见操作:

  • 打开和读取 BAM/SAM/CRAM 文件
  • 从特定基因组区域获取读取
  • 通过映射质量、标志或其他标准筛选读取
  • 写入筛选或修改后的比对
  • 计算覆盖度统计
  • 执行 pileup 分析(基于每个碱基的覆盖度)
  • 访问读取序列、质量得分和对齐信息

参考: 参见 references/alignment_files.md 获取详细文档:

  • 打开和读取比对文件
  • AlignedSegment 属性和方法
  • 使用 fetch() 进行基于区域的获取
  • 覆盖度的 pileup 分析
  • 写入和创建 BAM 文件
  • 坐标系统和索引
  • 性能优化提示

2. 变异文件操作(VCF/BCF)

使用 VariantFile 类来处理来自变异调用管道的遗传变异。这适用于变异分析、筛选、注释或群体遗传学。

常见操作:

  • 读取和写入 VCF/BCF 文件
  • 查询特定区域的变异
  • 访问变异信息(位置、等位基因、质量)
  • 提取样本的基因型数据
  • 通过质量、等位基因频率或其他标准筛选变异
  • 用附加信息注释变异
  • 子集样本或区域

参考: 参见 references/variant_files.md 获取详细文档:

  • 打开和读取变异文件
  • VariantRecord 属性和方法
  • 访问 INFO 和 FORMAT 字段
  • 处理基因型和样本
  • 创建和写入 VCF 文件
  • 筛选和子集变异
  • 多样本 VCF 操作

3. 序列文件操作(FASTA/FASTQ)

使用 FastaFile 进行参考序列的随机访问,使用 FastxFile 读取原始测序数据。这适用于提取基因序列、验证变异对照参考或处理原始读取。

常见操作:

  • 通过基因组坐标查询参考序列
  • 提取基因或感兴趣区域的序列
  • 读取带质量得分的 FASTQ 文件
  • 验证变异参考等位基因
  • 计算序列统计
  • 通过质量或长度筛选读取
  • 在 FASTA 和 FASTQ 格式之间转换

参考: 参见 references/sequence_files.md 获取详细文档:

  • FASTA 文件访问和索引
  • 按区域提取序列
  • 处理基因的反向互补
  • 顺序读取 FASTQ 文件
  • 质量得分转换和筛选
  • 处理 tabix 索引文件(BED、GTF、GFF)
  • 常见序列处理模式

4. 集成生物信息学工作流

Pysam 擅长整合多种文件类型以进行全面的基因组分析。常见工作流结合比对文件、变异文件和参考序列。

常见工作流:

  • 计算特定区域的覆盖度统计
  • 验证变异对照比对读取
  • 用覆盖度信息注释变异
  • 提取变异位置周围的序列
  • 基于多个标准筛选比对或变异
  • 生成可视化覆盖度轨迹
  • 跨多种数据类型的质量控制

参考: 参见 references/common_workflows.md 获取详细示例:

  • 质量控制工作流(BAM 统计、参考一致性)
  • 覆盖度分析(每碱基覆盖度、低覆盖度检测)
  • 变异分析(注释、通过读取支持筛选)
  • 序列提取(变异上下文、基因序列)
  • 读取筛选和子集
  • 集成模式(BAM+VCF、VCF+BED 等)
  • 复杂工作流的性能优化

关键概念

坐标系统

关键: Pysam 使用 0-based, half-open 坐标(Python 约定):

  • 起始位置是 0-based(第一个碱基是位置 0)
  • 结束位置是 exclusive(不包括在范围内)
  • 区域 1000-2000 包括碱基 1000-1999(总共 1000 个碱基)

例外: fetch() 中的区域字符串遵循 samtools 约定(1-based):

samfile.fetch("chr1", 999, 2000)      # 0-based: 位置 999-1999
samfile.fetch("chr1:1000-2000")       # 1-based 字符串: 位置 1000-2000

VCF 文件: 在文件格式中使用 1-based 坐标,但 VariantRecord.start 是 0-based。

索引要求

随机访问特定基因组区域需要索引文件:

  • BAM 文件: 需要 .bai 索引(用 pysam.index() 创建)
  • CRAM 文件: 需要 .crai 索引
  • FASTA 文件: 需要 .fai 索引(用 pysam.faidx() 创建)
  • VCF.gz 文件: 需要 .tbi tabix 索引(用 pysam.tabix_index() 创建)
  • BCF 文件: 需要 .csi 索引

没有索引时,使用 fetch(until_eof=True) 进行顺序读取。

文件模式

打开文件时指定格式:

  • "rb" - 读取 BAM(二进制)
  • "r" - 读取 SAM(文本)
  • "rc" - 读取 CRAM
  • "wb" - 写入 BAM
  • "w" - 写入 SAM
  • "wc" - 写入 CRAM

性能考虑

  1. 始终使用索引文件 进行随机访问操作
  2. 使用 pileup() 进行列式分析 而不是重复的 fetch 操作
  3. 使用 count() 进行计数 而不是手动迭代和计数
  4. 处理独立基因组区域时并行处理
  5. 显式关闭文件 以释放资源
  6. 使用 until_eof=True 进行无索引的顺序处理
  7. 避免多个迭代器 除非必要(如果需要,使用 multiple_iterators=True

常见陷阱

  1. 坐标混淆: 记住不同上下文中的 0-based 与 1-based 系统
  2. 缺少索引: 许多操作需要索引文件——首先创建它们
  3. 部分重叠: fetch() 返回与区域边界重叠的读取,不仅仅是完全包含的
  4. 迭代器作用域: 保持 pileup 迭代器引用活跃以避免“PileupProxy accessed after iterator finished”错误
  5. 质量得分编辑: 在更改 query_sequence 后不能就地修改 query_qualities——先创建副本
  6. 流限制: 仅支持 stdin/stdout 进行流式处理,不支持任意 Python 文件对象
  7. 线程安全: 虽然在 I/O 期间释放了 GIL,但全面的线程安全性尚未完全验证

命令行工具

Pysam 提供对 samtools 和 bcftools 命令的访问:

# 排序 BAM 文件
pysam.samtools.sort("-o", "sorted.bam", "input.bam")

# 索引 BAM
pysam.samtools.index("sorted.bam")

# 查看特定区域
pysam.samtools.view("-b", "-o", "region.bam", "input.bam", "chr1:1000-2000")

# BCF 工具
pysam.bcftools.view("-O", "z", "-o", "output.vcf.gz", "input.vcf")

错误处理:

try:
    pysam.samtools.sort("-o", "output.bam", "input.bam")
except pysam.SamtoolsError as e:
    print(f"Error: {e}")

资源

references/

每种主要能力的详细文档:

  • alignment_files.md - SAM/BAM/CRAM 操作的完整指南,包括 AlignmentFile 类、AlignedSegment 属性、fetch 操作、pileup 分析和写入比对

  • variant_files.md - VCF/BCF 操作的完整指南,包括 VariantFile 类、VariantRecord 属性、基因型处理、INFO/FORMAT 字段和多样本操作

  • sequence_files.md - FASTA/FASTQ 操作的完整指南,包括 FastaFile 和 FastxFile 类、序列提取、质量得分处理和 tabix 索引文件访问

  • common_workflows.md - 集成生物信息学工作流的实际示例,结合多种文件类型,包括质量控制、覆盖度分析、变异验证和序列提取

获取帮助

有关特定操作的详细信息,请参考适当的参考文档:

  • 使用 BAM 文件或计算覆盖度 → alignment_files.md
  • 分析变异或基因型 → variant_files.md
  • 提取序列或处理 FASTQ → sequence_files.md
  • 整合多种文件类型的复杂工作流 → common_workflows.md

官方文档:https://pysam.readthedocs.io/