使用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




