6

.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ファイルであるため、なぜこれが発生するのかについて私は非常に混乱しています。ドキュメントには、ファイルへのパスまたはファイルのようなオブジェクトのいずれかを渡すことができると明記されていますが、私の場合はどちらも機能しません。

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

4

1 に答える 1

-2

私はこの問題を理解することができず、まったく別の方法でそれを行うことになりました。

編集:私が使用しているDjangoアプリでは、ユーザーはアセットを.zipファイルの形式でアップロードし、後でアップロードしたすべてのもの(および動的に生成する他のコンテンツ)を別の構造の別のzipにダウンロードできる必要がありました。そこで、以前にアップロードしたファイルを解凍し、そのファイルの内容を別のzipに圧縮したかったのですが、エラーが原因で実行できませんでした。ユーザーがダウンロードを要求したときにzipファイルを読み取る代わりに、Django InMemoryUploadedFile(コンテンツを正常に読み取ることができた)からzipファイルを解凍し、解凍したファイルを後で使用できるようにファイルシステムに残しました。zipの内容は2つの小さい画像ファイルしかないため、後で使用するために事前にzipを解凍するというこの回避策は、私の目的には問題なく機能しました。

于 2013-01-18T14:13:51.950 に答える