Python Zipfile-Недопустимый Аргумент Errno 22

у меня есть .zip-файл, и хотел бы знать имена файлов внутри него. Вот код:

zip_path = glob.glob(path + '/*.zip')[0] 
file = open(zip_path, 'r') # opens without error
if zipfile.is_zipfile(file):
    print str(file) # prints to console
my_zipfile = zipfile.ZipFile(zip_path) # throws IOError

вот этот вывод:

<open file u'/Users/me/Documents/project/uploads/assets/peter/offline_message/offline_imgs.zip', mode 'r' at 0x107b2a150>
Traceback (most recent call last):
  File "/Users/me/Documents/project/admin_dev/proj_name/views.py", line 1680, in get_dps_app_builder_assets
    link_to_assets_zip = zip_dps_app_builder_assets(server_url, app_slug, button_slugs)
  File "/Users/me/Documents/project/admin_dev/proj_name/views.py", line 1724, in zip_dps_app_builder_assets
    my_zipfile = zipfile.ZipFile(zip_path)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 712, in __init__
    self._GetContents()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 746, in _GetContents
    self._RealGetContents()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 779, in _RealGetContents
    fp.seek(self.start_dir, 0)
IOError: [Errno 22] Invalid argument

Я очень смущен, почему это происходит, так как файл явно существует и является допустимым .сжатый файл. В документации четко указано, что вы можете передать ему либо путь к файлу, либо файлоподобный объект, ни один из которых не работает в моем дело:

http://docs.python.org/2/library/zipfile#zipfile-objects

1 ответов


Я не смог понять эту проблему и в конечном итоге сделал это совершенно по-другому.

EDIT: в приложении Django, с которым я работаю, пользователи должны иметь возможность загружать активы в виде .zip-файлы, а затем загрузите все, что они загрузили (плюс другой контент, который мы генерируем динамически) в другой zip с другой структурой. Итак, я хотел распаковать ранее загруженный файл и застегнуть содержимое этого файла в другой zip, что я не мог сделать из-за ошибка. Вместо того, чтобы читать zip-файл, когда пользователь запросил загрузку, я в конечном итоге распаковал его из файла Django InMemoryUploadedFile (содержимое которого я смог успешно прочитать) и просто оставил распакованные файлы в файловой системе для работы позже. Содержимое zip-это только два небольших файла изображений, поэтому этот обходной путь распаковки zip раньше времени, который будет использоваться позже, работал нормально для моих целей.