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

如何解压内含CSV的gunzip文件?代码报bad zip file错误如何处理

gunzip解压底层逻辑
  • gunzip基于DEFLATE无损压缩算法实现解压能力,DEFLATE由LZ77字典压缩算法和哈夫曼熵编码算法组合而成
  • 解压第一步会校验文件头合法性:标准gzip文件前2字节为固定魔数0x1F 0x8B,第3字节标识压缩算法(固定为0x08代表DEFLATE),后续头字段存储原始文件名、文件修改时间、操作系统类型等元数据
  • 头校验通过后逐块解析压缩数据:先还原块对应的哈夫曼编码树,再通过编码树解码得到LZ77的匹配偏移量、匹配长度信息,结合滑动窗口字典还原出原始字节流
  • 全量数据解压完成后,会用文件末尾存储的4字节CRC32校验值、4字节原始数据长度,和解压得到的实际数据做一致性校验,校验失败就会抛出文件损坏类错误
报错原因分析

你遇到的bad zip file错误核心有两类可能:

  1. 你没有对gzip压缩文件做解压操作,直接把压缩后的字节流当成普通csv或者zip文件读取,格式不匹配触发报错
  2. 你手中的gzip文件本身不完整、被篡改,头魔数或者尾部校验值不合法,无法通过gunzip的基础校验
    另外你贴出的写csv代码本身存在逻辑错误:writer.writerows()要求入参是逐行组成的字典列表,而df.to_dict()默认返回以列名为key、整列数据为value的嵌套字典,格式不匹配会导致写入内容异常。
正确实现代码

直接解压本地gzip文件得到CSV

import gzip
import shutil

# 输入为你的gzip文件路径,输出为解压后的csv路径
with gzip.open("your_file.csv.gz", "rb") as gz_f:
    with open("output.csv", "wb") as csv_f:
        shutil.copyfileobj(gz_f, csv_f)

直接将DataFrame写入gzip压缩的CSV文件

import gzip
import csv

with gzip.open("xyz.csv.gz", "wt", encoding="utf-8") as gz_f:
    writer = csv.DictWriter(gz_f, fieldnames=df.columns.to_list())
    writer.writeheader()
    # to_dict传入'records'参数生成逐行字典列表
    writer.writerows(df.to_dict("records"))

Pandas直接读取gzip压缩的CSV文件

import pandas as pd
# 无需提前手动解压,pandas自动处理gzip解压
df = pd.read_csv("your_file.csv.gz", compression="gzip")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:06:03