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

Python3读取Zip压缩包内CSV文件报错,求解决方法

Python 3中读取压缩包内CSV文件的报错解决

嘿,这个问题我太熟了!你遇到的ParserError其实是Python 3和Python 2在文件IO处理上的核心差异导致的,别慌,我给你拆解清楚并解决掉~

问题到底出在哪?

在Python 2里,zipfile.ZipFile.open()返回的是文本模式的文件对象,pandas的read_csv()可以直接处理这种对象输出的字符串内容。但到了Python 3,这个方法默认返回的是二进制模式的文件对象——它输出的是bytes类型数据,而read_csv()明确期望的是字符串类型的输入,这就直接触发了那个报错。

两种快速修复方案

方案一:打开文件时直接指定文本模式

最简单的方式就是在调用zippedyear.open()时,加上mode='r'参数(明确指定文本读取模式),同时指定CSV文件对应的编码(比如常用的utf-8):

import pandas as pd
import zipfile

with zipfile.ZipFile('myarchive.zip', 'r') as zippedyear:
    for filename in ['myfile1.csv', 'myfile2.csv', 'myfile3.csv']:
        # 明确指定文本模式和编码
        mydf = pd.read_csv(zippedyear.open(filename, mode='r', encoding='utf-8'))

方案二:用io.TextIOWrapper包装二进制流

如果你的Python版本稍旧,或者需要更灵活的编码处理逻辑,可以用io模块的TextIOWrapper把二进制文件对象转换成文本模式的对象:

import pandas as pd
import zipfile
import io

with zipfile.ZipFile('myarchive.zip', 'r') as zippedyear:
    for filename in ['myfile1.csv', 'myfile2.csv', 'myfile3.csv']:
        # 将二进制流包装为文本流
        text_file = io.TextIOWrapper(zippedyear.open(filename), encoding='utf-8')
        mydf = pd.read_csv(text_file)

小提示

  • 一定要匹配CSV文件的实际编码!如果你的文件是GBK编码的,就把encoding改成gbk,不然可能会出现乱码问题。
  • Python 3对文本和二进制数据做了严格区分,这是为了避免Python 2里隐式转换带来的各种混乱,虽然一开始有点不适应,但确实是更规范的设计哦~

内容的提问来源于stack exchange,提问作者鈩暿樖樶竼岣结笜

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:41:58