如何在Python中读取vcf.gz格式文件?
报错原因
bgzip file_name.vcf、tabix file_name.vcf.gz属于Shell命令,只能在系统终端(Windows下为CMD/PowerShell、macOS/Linux下为Terminal)执行。直接在Python交互解释器中运行这类命令,Python无法识别Shell语法,就会抛出SyntaxError: invalid syntax错误。
读取vcf.gz格式文件不需要提前手动解压,以下两种方案可直接生效:
方案1:Python标准库直接读取(无额外依赖)
使用Python内置的gzip库直接打开压缩文件逐行解析,不需要安装任何第三方包,适合简单读取场景:
import gzip vcf_file = "file_name.vcf.gz" # 以文本模式打开压缩vcf with gzip.open(vcf_file, "rt", encoding="utf-8") as f: for line in f: # 跳过元信息注释行 if line.startswith("##"): continue # 按制表符分割每行内容,可自行扩展解析逻辑 line_content = line.strip().split("\t") print(line_content)
方案2:专用生物信息库读取(适合专业分析场景)
如果需要做位点过滤、基因型提取等专业vcf操作,使用pysam库可以省去手动解析格式的工作量:
- 先在系统终端执行安装命令(不要在Python环境内执行):
pip install pysam - 安装完成后在Python代码中调用读取接口:
import pysam vcf_file = "file_name.vcf.gz" vcf_handle = pysam.VariantFile(vcf_file) # 遍历所有变异记录 for variant in vcf_handle.fetch(): # 可直接调用属性获取染色体、位置、参考碱基、变异碱基等信息 print(variant.chrom, variant.pos, variant.ref, variant.alts)
操作提示
- 所有命令行操作(包括安装依赖、执行bgzip/tabix建索引)都需要在系统终端完成,不要在Python的
>>>交互提示符下输入非Python语法的命令。 - 若需要使用bgzip/tabix工具,需提前在系统中部署htslib工具集,否则终端会返回命令不存在的报错。
内容的提问来源于stack exchange,提问作者Elisa L.
相关产品推荐
相关产品推荐

