Использование модуля zipfile
для распаковки большого файла данных в Python корректно работает на Python 2, но на Python 3.6.0 появляется следующая ошибка:
BadZipFile: Bad CRC-32 for file 'myfile.csv'
Я проследил это с кодом обработки ошибок, проверяющим значения CRC.
Использование ZipFile.testzip()
на Python 2 ничего не возвращает (все файлы в порядке). Запуск его на Python 3 возвращает 'myfile.csv'
, указывающий на проблему с этим файлом.
Код для воспроизведения как на Python 2, так и на Python 3 (включает загрузку 300 МБ, извините):
import zipfile
import urllib
import sys
url = "https://de.iplantcollaborative.org/anon-files//iplant/home/shared/commons_repo/curated/Vertnet_Amphibia_Sep2016/VertNet_Amphibia_Sept2016.zip"
if sys.version_info >= (3, 0, 0):
urllib.request.urlretrieve(url, "vertnet_latest_amphibians.zip")
else:
urllib.urlretrieve(url, "vertnet_latest_amphibians.zip")
archive = zipfile.ZipFile("vertnet_latest_amphibians.zip")
archive.testzip()
Кто-нибудь понимает, почему эта разница существует, и если есть способ заставить Python 3 правильно извлечь файл, используя:
archive.extract("vertnet_latest_amphibians.csv")