Python如何从URL下载ZIP仅保存不解压?附OverflowError报错解决
代码修改说明
核心调整思路
- 移除所有ZIP解压相关逻辑:删除
zipfile模块的导入、解压代码块,全程不对ZIP内容做读取、解压操作 - 解决
OverflowError报错:放弃一次性读取整个文件到内存的写法,改用分块流式写入的方式,适配大文件下载场景,规避整数读取上限问题 - 直接将下载的二进制流保存为本地原始ZIP文件,无额外加工
具体修改细节
- 删掉冗余依赖:移除
from zipfile import ZipFile导入,同时不再需要BytesIO相关引用(原代码未导入BytesIO本身也会触发运行报错) - 修正原代码的缩进格式错误
- 将原解压逻辑替换为本地文件写入逻辑,保存路径需指定到具体的ZIP文件路径,不能仅填写目标文件夹
可直接运行的修改后代码
from urllib.request import urlopen zipurl = 'https://opendata.geoportal.gov.pl/prg/adresy/PunktyAdresowe/POLSKA.zip' # 指定ZIP文件的完整保存路径,可根据实际需求修改文件名 save_zip_path = r'/home/gis/adresypolska/POLSKA.zip' with urlopen(zipurl) as resp: # 分块10MB读写,避免大文件触发内存溢出、整数读取超限报错 with open(save_zip_path, 'wb') as f: while chunk := resp.read(10 * 1024 * 1024): f.write(chunk)
注意事项
- 分块大小可根据网络环境调整,当前10MB的分块设置远低于Python socket读取的整数上限,能稳定规避原报错
- 代码全程未引入解压流程,下载完成后本地留存的就是完整的原始ZIP压缩包,不会自动触发解压操作
- 需提前确保保存路径的父目录存在(比如本例中
/home/gis/adresypolska目录需提前创建,否则会触发文件路径不存在的报错)
内容的提问来源于stack exchange,提问作者user13093993
相关产品推荐
相关产品推荐

