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

如何用Python读取.zip内的.gz文件?遇NotImplementedError报错

解决NotImplementedError: That compression method is not supported问题

问题根源

这个报错来自zipfile.ZipFile.open(),说明你的zip包使用了Python标准库zipfile不支持的压缩算法(比如DEFLATE64、LZMA等),或者代码存在冗余解压逻辑。

分步解决方案

1. 确认Zip包的压缩类型

先运行以下代码排查每个文件的压缩格式:

import zipfile

zf = zipfile.ZipFile("file.zip", "r")
for info in zf.infolist():
    compress_type_name = zipfile._compress_type_map.get(info.compress_type, "不支持的压缩类型")
    print(f"文件: {info.filename} | 压缩类型: {compress_type_name}")

2. 处理不支持的压缩算法

  • 如果输出显示「不支持的压缩类型」:
    • 若是DEFLATE64格式:安装zipfile-deflate64库,替换导入语句后再执行逻辑:
      import zipfile_deflate64 as zipfile
      
    • 若是LZMA/7z相关格式:安装py7zr库,用它读取zip包:
      import py7zr
      import pandas as pd
      
      with py7zr.SevenZipFile("file.zip", mode='r') as zf:
          for filename in zf.getnames():
              if filename.endswith('.gz'):
                  with zf.open(filename) as gz_stream:
                      df = pd.read_csv(gz_stream, compression='gzip', sep=';')
                      # 此处添加你的DataFrame处理逻辑
      

3. 修正冗余解压逻辑

原代码同时用gzip.GzipFile和pd.read_csv(compression="gzip")做了两次解压,属于冗余操作。简化后的正确代码:

import zipfile
import pandas as pd

zf = zipfile.ZipFile("file.zip", "r")
for info in zf.infolist():
    if info.filename.endswith('.gz'):
        with zf.open(info) as stream:
            df = pd.read_csv(stream, compression='gzip', sep=';')
            # 处理DataFrame,例如打印数据示例
            print(df.head())

4. 验证Zip包完整性

如果以上方法都无效,手动解压zip包检查:

  • 若手动解压失败,说明原zip包损坏,需重新获取;
  • 若手动解压后gz文件能正常打开,再排查代码运行环境的依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:13:09