Python从URL读取Zip文件提取CSV时出现BadZipFile错误如何修复
错误原因
- 你当前使用的是Google Drive的文件预览页面链接,请求返回的是HTML网页内容,并非二进制Zip文件流,因此传入
ZipFile解析时直接抛出BadZipFile错误 - 你拼接
url + urllib.request.quote(zip_file_name)的逻辑不符合Google Drive直链下载的规则,属于无效拼接
修复方案
Google Drive共享链接的通用格式为https://drive.google.com/file/d/{文件ID}/view,你需要先从原链接中提取文件ID,再替换到直链下载模板https://drive.google.com/uc?export=download&id={文件ID}中,即可获取真实的Zip文件流。你给出的链接中文件ID为1gQGYF8TaznCfdevo7-MsHW5IcwftZWP_,修复后的代码如下:
import pandas as pd from io import BytesIO, TextIOWrapper from zipfile import ZipFile import urllib # 拼接Google Drive直链下载地址 file_id = '1gQGYF8TaznCfdevo7-MsHW5IcwftZWP_' url = f'https://drive.google.com/uc?export=download&id={file_id}' resp = urllib.request.urlopen(url) zipfile = ZipFile(BytesIO(resp.read())) data = TextIOWrapper(zipfile.open('high42.csv'), encoding='utf-8') df = pd.read_csv(data)
注意:如果Zip文件大小超过100M,Google Drive会跳过病毒扫描弹出下载确认页,这种场景需要额外处理请求携带Cookie获取真实下载链接,100M以内的小体积Zip文件以上代码可直接运行。
内容的提问来源于stack exchange,提问作者Georg_Z
相关产品推荐
相关产品推荐

