我有一个.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
我很困惑为什么会发生这种情况,因为文件显然在那里并且是一个有效的.zip文件。文档清楚地说明你可以将它传递给文件的路径或类似文件的对象,在我的情况下都不能工作:
答案 0 :(得分:-2)
我无法解决这个问题,最终完全采用不同的方式。
编辑:在我使用的Django应用程序中,用户需要能够以.zip文件的形式上传资源,然后将其上传的所有内容(以及我们动态生成的其他内容)下载到具有不同结构的另一个zip中。所以,我想解压一个以前上传的文件并将该文件的内容压缩到另一个zip中,由于该错误,我无法做到这一点。我没有在用户请求下载时读取zip文件,而是将其从Django InMemoryUploadedFile(我能够成功读取的内容)中解压缩,然后将解压缩的文件留在文件系统中以便以后使用。 zip的内容只有两个小的图像文件,所以这种解压缩提前拉链以便以后使用的解决方法对我来说是可行的。