You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用gzip模块解压.dsx文件报BadGzipFile错误

问题原因

报错的核心原因是文件格式和你预期的不一致:

  • Python的gzip模块会严格校验gzip格式的文件头:标准gzip文件开头两个字节必须是固定魔数\x1f\x8b,不符合就直接抛出BadGzipFile错误。你看到的报错里提示读到的头是b'PK',这是ZIP压缩格式的标志性头(来自ZIP发明者Phil Katz的姓名缩写),说明这个.dsx文件实际是ZIP封装的压缩包,不是纯gzip格式。
  • 命令行gzip工具能正常解压,是因为GNU版的命令行gzip做了多格式兼容:如果输入是仅包含单个文件的ZIP压缩包,它会自动识别并解压内部内容,不需要额外参数。但Python标准库的gzip模块没有实现这层兼容逻辑,只支持标准gzip格式,哪怕你把文件改后缀为.gz也无法识别,这也是你用Python的gzip命令行模式同样报错的原因。
解决方法

这类.dsx都是仅包含单个XML文件的ZIP包,直接用Python标准库的zipfile模块读取即可,读取包内第一个文件的内容,就能得到和命令行gzip输出完全一致的结果,参考代码:

import sys
import zipfile

def main():
    file_path = sys.argv[1]
    with zipfile.ZipFile(file_path, 'r') as zf:
        # 取压缩包内唯一的XML文件
        inner_file_name = zf.namelist()[0]
        with zf.open(inner_file_name, 'rb') as f:
            content = f.read()
            # 输出XML文本,编码可根据XML头声明调整,绝大多数场景用utf-8即可
            print(content.decode('utf-8'))

if __name__ == "__main__":
    main()

如果解码时出现编码错误,查看XML文件开头的<?xml ... encoding="xxx"?>声明,把decode的参数换成对应的编码即可。


内容的提问来源于stack exchange,提问作者mitchkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:36:16