Необходимо распаковать архив из Azure Databricks, используя Python

#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 не поддерживал?