You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用zipfile.extractall解压时触发BadZipFile: Bad CRC-32错误求助

解决Colab中解压zip文件时的Bad CRC-32错误

这个BadZipFile: Bad CRC-32 for file 'arxiv-release/train.txt'错误几乎可以肯定是你的zip文件在下载、同步到Google Drive的过程中损坏了,或者挂载Drive时读取出现了异常。下面是几个按优先级排序的解决方案,你可以一步步尝试:

1. 直接在Colab重新下载文件(最推荐)

很多时候把文件先存到本地Drive再同步到Colab容易出问题,不如直接在Colab环境里重新下载,避免同步损耗。用以下命令下载目标zip文件:

!wget --no-check-certificate 'https://drive.google.com/uc?export=download&id=1K2kDBTNXS2ikx9xKmi2Fy0Wsc5u_Lls0' -O arxiv-release.zip

下载完成后,再用Python代码解压:

import zipfile
with zipfile.ZipFile('arxiv-release.zip', 'r') as zip_ref:
    zip_ref.extractall('arxiv-release')

2. 用系统unzip命令代替Python的zipfile库

系统自带的unzip工具比Python的zipfile库更健壮,尤其处理大文件时。如果你的文件已经在Drive里,试试这个命令:

!unzip "/content/gdrive/My Drive/arxiv-release.zip" -d arxiv-release

如果有损坏的部分,它还会提示你是否跳过或者尝试修复。

3. 尝试修复损坏的zip文件

如果重新下载不方便,可以用zip自带的修复工具尝试修复文件:

!zip -FF "/content/gdrive/My Drive/arxiv-release.zip" --out fixed-arxiv.zip

修复完成后,再解压修复后的文件:

import zipfile
with zipfile.ZipFile('fixed-arxiv.zip', 'r') as zip_ref:
    zip_ref.extractall('arxiv-release')

注意:这个方法只能修复轻微损坏的文件,如果文件损坏严重可能无效。

4. 重新挂载Google Drive

有时候Drive挂载不稳定会导致读取文件出错,先卸载再重新挂载:

from google.colab import drive
drive.flush_and_unmount()
drive.mount('/content/gdrive')

挂载完成后,再重新尝试解压操作。

如果以上方法都没能解决问题,建议去数据集对应的项目页面确认是否有更新的获取方式,或者检查原文件是否本身存在问题。

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

火山引擎 最新活动