如何用Python动态读取Zip文件中的CSV?解决Kaggle链接读取报错
解决方案:动态读取Kaggle压缩包中的CSV文件
错误原因
你使用的Kaggle下载链接指向的是ZIP压缩包,而非直接的CSV文件。pd.read_csv()会将压缩包的二进制内容当作纯文本CSV解析,自然会触发字段不匹配的ParserError。
可行方法
方法1:内存中解压并读取目标CSV
通过requests获取压缩包字节流,结合zipfile和io在内存中解压,直接读取指定的rad_15min.csv:
import pandas as pd import requests from io import BytesIO from zipfile import ZipFile # 压缩包下载链接 zip_url = "https://www.kaggle.com/datasets/lucafrance/bike-traffic-in-munich/download?datasetVersionNumber=7" # 发起请求(若遇403错误,需添加Kaggle API认证头,见下方注意事项) response = requests.get(zip_url) response.raise_for_status() # 捕获请求失败的异常 # 内存中处理zip文件 with ZipFile(BytesIO(response.content)) as zip_file: # 先确认目标文件存在于压缩包内 target_file = "rad_15min.csv" if target_file in zip_file.namelist(): # 读取并解析CSV df = pd.read_csv(zip_file.open(target_file)) else: raise FileNotFoundError(f"压缩包中未找到文件:{target_file}")
方法2:利用Pandas内置压缩参数直接读取
Pandas的read_csv支持直接处理ZIP压缩包,只需指定压缩方法和目标文件名:
import pandas as pd zip_url = "https://www.kaggle.com/datasets/lucafrance/bike-traffic-in-munich/download?datasetVersionNumber=7" # 直接读取zip包内的指定CSV df = pd.read_csv( zip_url, compression={"method": "zip", "archive_name": "rad_15min.csv"} )
注意事项
- Kaggle访问认证:若运行时遇到
403 Forbidden错误,说明需要Kaggle API认证。需在请求头中添加你的API Token:headers = {"Authorization": "Bearer YOUR_KAGGLE_API_TOKEN"} # 对应方法1的请求修改为: response = requests.get(zip_url, headers=headers) # 方法2可通过设置环境变量或配置文件完成认证,参考Kaggle官方文档 - 文件路径验证:若压缩包内的CSV文件位于子目录中(例如
bike-traffic-in-munich/rad_15min.csv),需修改archive_name或target_file为完整路径。可通过zip_file.namelist()查看压缩包内的所有文件路径。
内容的提问来源于stack exchange,提问作者Hamza
相关产品推荐
相关产品推荐

