#python #compression #azure-databricks #unzip #zipfile
Вопрос:
я использую код для распаковки архива, поступающего из хранилища больших двоичных объектов, и этот код уже работает для другого архива объемом 300 МБ, но при попытке распаковать другой архив размером больше этого, я получил эту ошибку:
"NotImplementedError: That compression method is not supported"
The last lines of error console show this :
/usr/local/lib/python3.8/zipfile.py in _get_decompressor(compress_type)
718
719 def _get_decompressor(compress_type):
--> 720 _check_compression(compress_type)
721 if compress_type == ZIP_STORED:
722 return None
/usr/local/lib/python3.8/zipfile.py in _check_compression(compression)
698 "Compression requires the (missing) lzma module")
699 else:
--> 700 raise NotImplementedError("That compression method is not supported")
И я использую этот код для этого:
# mother folder
files = dbutils.fs.ls(dl_path)
for fi in sorted(files, reverse=True):
zip_files = zipfile.ZipFile(f'/dbfs{dl_path}{fi.name}')
print(zip_files.namelist())
for f in zip_files.namelist():
zip_files.extract(f, str(extract_path).replace('dbfs:', '/dbfs'))
Я не знаю, почему в одном из архивов это работает, а в другом-нет. Я предполагаю, что это может быть о размере? Поэтому я думаю о том, чтобы попробовать: первый код и кроме второго? Идк, у кого-нибудь есть чаевые?
Комментарии:
1. В какой строке вашего кода происходит сбой?
2. «zip_files.extract(f, str(extract_path).replace(‘dbfs:’, ‘/dbfs’))» Эта строка. При извлечении, например, этот zip-файл большего размера, который я пытаюсь извлечь, не поддерживается, но он понятия не имел о чем, я ничего не думаю, если только размер не отличается в случае.
Ответ №1:
В zip-файле допускается множество методов сжатия. Похоже, что этот zip-файл использует метод сжатия, не поддерживаемый библиотекой Python.
Используйте команду командной строки для распаковки zip-файла, в котором отсутствует список содержимого. Делать unzip -lv file.zip
. В нем будут перечислены используемые методы сжатия.
Комментарии:
1. Да, баш был моим решением здесь. Поэтому я сделал этот код : %sh распаковать $path_zip-d extraction_path И получил другие изменения, чтобы сделать этот код как можно более универсальным, думая о путях. Но спасибо за ваш ответ !
2. Итак, что же это был за метод сжатия, который Python не поддерживал?