如何在Colab中用Python直接合并增量归档格式的拆分Zip文件?
在Google Colab中合并GitHub拆分Zip文件并解压的可行方案
问题说明
需要从指定GitHub数据集下载拆分的Zip分卷(File_Name.zip.001至File_Name.zip.007)到Colab临时存储,合并后直接解压。此前尝试用zipfile库读取每个分卷并合并的方法失败,报错BadZipFile: File is not a zip file,需纯Colab代码方案,禁止本地工具或重新上传操作。
解决方案思路
这类拆分的Zip分卷是完整Zip文件的二进制分段,而非独立可读取的Zip文件,因此正确操作是按顺序拼接所有分卷的二进制内容,生成完整Zip后再解压。
完整可运行代码
import requests import os import zipfile # 设置Colab临时存储路径 data_path = "/content/eva_dataset" os.makedirs(data_path, exist_ok=True) # 生成分卷文件名列表(001至007) zip_parts = [f"File_Name.zip.00{i}" for i in range(1, 8)] # 步骤1:从GitHub下载所有分卷文件 github_raw_base_url = "https://raw.githubusercontent.com/kang-gnak/eva-dataset/main/" for part in zip_parts: file_url = f"{github_raw_base_url}{part}" # 流式下载大文件,避免内存溢出 with requests.get(file_url, stream=True) as response: response.raise_for_status() # 捕获请求错误 save_path = os.path.join(data_path, part) with open(save_path, "wb") as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) print(f"下载完成:{part}") # 步骤2:合并分卷为完整Zip文件 full_zip_path = os.path.join(data_path, "File_Name.zip") with open(full_zip_path, "wb") as full_zip: for part in zip_parts: part_path = os.path.join(data_path, part) with open(part_path, "rb") as f: full_zip.write(f.read()) # 可选:删除分卷释放Colab临时空间 os.remove(part_path) print("分卷合并完成,生成完整Zip文件") # 步骤3:解压完整Zip文件 with zipfile.ZipFile(full_zip_path, "r") as zip_ref: zip_ref.extractall(data_path) print("文件解压完成,存储路径:", data_path)
关键说明
- 分卷本质:拆分的
.001至.007是二进制分段,不是独立Zip文件,因此不能用ZipFile直接读取单个分卷,必须拼接二进制内容。 - 流式下载:用
stream=True和分块写入处理大文件,避免Colab内存不足。 - 可重复性:代码可直接复制到Colab笔记本运行,无需本地操作,满足分享需求。
内容的提问来源于stack exchange,提问作者g6k
相关产品推荐
相关产品推荐

