将VCF文件转换为Phylip格式时遭遇Unicode解码错误求助
解决vcf2phylip转换VCF时的Unicode解码错误
问题原因
你遇到的UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1,本质是你的VCF文件是gzip压缩格式(0x8b是gzip压缩文件的标志性字节),而vcf2phylip.py默认以纯文本UTF-8格式读取文件,自然解码失败。
解决方法
方法1:先解压VCF文件再转换
这是最直接的方案:
- 先执行解压命令(如果文件后缀是
.gz直接用,无后缀但实际是压缩的也适用):
解压后会得到无压缩的gzip -d angsd_new_vcf_with_OUTGROUP.vcf.gzangsd_new_vcf_with_OUTGROUP.vcf文件 - 再重新运行转换命令:
python vcf2phylip.py -i angsd_new_vcf_with_OUTGROUP.vcf
方法2:修改vcf2phylip代码支持压缩文件
如果不想解压文件,直接修改脚本让它支持读取gzip压缩文件:
- 打开
vcf2phylip.py,在文件最顶部添加一行导入代码:import gzip - 找到
extract_sample_names函数里打开文件的代码(对应报错的第73行附近),把原来的:
替换成:with open(filename, 'r') as vcf:with gzip.open(filename, 'rt', encoding='utf-8') as vcf: - 保存修改后,直接运行原来的转换命令即可。
内容的提问来源于stack exchange,提问作者Blessing Sekhwela
相关产品推荐
相关产品推荐

