You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

关键说明

  1. 分卷本质:拆分的.001至.007是二进制分段,不是独立Zip文件,因此不能用ZipFile直接读取单个分卷,必须拼接二进制内容。
  2. 流式下载:用stream=True和分块写入处理大文件,避免Colab内存不足。
  3. 可重复性:代码可直接复制到Colab笔记本运行,无需本地操作,满足分享需求。

内容的提问来源于stack exchange,提问作者g6k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:05:17