如何使用Pandas读取ZIP压缩包中的Excel文件?
如何用pandas读取压缩包中的Excel文件并逐行解析
嘿,我来帮你搞定这个问题!当你需要读取zip压缩包里的Excel文件时,pandas其实支持直接处理,不用先手动解压,下面给你两种靠谱的方法,还有排查坑点的小技巧:
方法1:直接指定压缩包内的文件路径
pandas可以识别特殊的URL格式来读取压缩包内的文件,你只需要把路径写成 zip://<压缩包路径>#<内部Excel文件名> 就行。举个实际例子:
import pandas as pd # 相对路径(压缩包和脚本在同一文件夹) df = pd.read_excel('zip://./your_file.zip#filename.xlsx') # 如果Excel文件在压缩包的子文件夹里,比如data/filename.xlsx # df = pd.read_excel('zip://./your_file.zip#data/filename.xlsx') # 逐行解析的话,用iterrows()遍历就行 for index, row in df.iterrows(): # 这里写你的逐行处理逻辑,比如打印某一列 print(row['你的列名'])
要是用绝对路径的话,格式就是 zip:///绝对路径/your_file.zip#filename.xlsx(注意开头三个斜杠)。
方法2:手动用zipfile模块读取(更灵活)
如果第一种方法遇到奇怪的问题,你可以用Python自带的zipfile模块手动打开压缩包,再把文件对象传给pandas,这种方式能更清楚地看到压缩包里的内容:
import pandas as pd from zipfile import ZipFile with ZipFile('your_file.zip', 'r') as zip_obj: # 先确认压缩包里的文件列表,避免文件名拼写错误 print("压缩包内的文件:", zip_obj.namelist()) # 打开指定的Excel文件 with zip_obj.open('filename.xlsx') as excel_file: df = pd.read_excel(excel_file) # 逐行处理数据 for index, row in df.iterrows(): # 替换成你的处理逻辑 print(f"第{index+1}行数据:{row}")
常见坑点排查
- 文件名大小写问题:压缩包里的文件名可能和你写的不一样(比如
Filename.xlsxvsfilename.xlsx),用zip_obj.namelist()打印出来确认准没错。 - 压缩包损坏:先手动解压压缩包,看看Excel文件能不能正常打开,排除文件本身的问题。
- pandas版本过低:老版本的pandas对压缩包路径的支持可能有bug,运行
pip install --upgrade pandas升级到最新稳定版试试。
内容的提问来源于stack exchange,提问作者Ivan Vodopyanov
相关产品推荐
相关产品推荐

