2017-02-03 19 views
1

this URLからダウンロードしたファイルをPythonのzipfile機能で開くことができません。Python 3.5がzipファイルを開かない

'Zip archive data, at least v2.0 to extract'

このファイルは(import magic; magic.from_file("...")経由)しかし、私のMacの内蔵デフレータを使って開き、python-magicないファイルがあることを報告します。しかし、私がやるとき

with open("498200/Broadband Data Dig - Datasets/NYC Connected Broadband Data Dig Files.zip") as fp: 
    zipcontent = zipfile.ZipFile(fp) 

私が取得:

BadZipFile: File is not a zip file

私のPythonのバージョンが3.5.2です。何が起きてる?

答えて

2

ZipFileは、ファイル名に基づいてファイルを開きます:

with zipfile.ZipFile("498200/Broadband Data Dig - Datasets/NYC Connected Broadband Data Dig Files.zip") as zip_file: 
    print("do stuff with", zip_file) 
+0

Oof。シニアの瞬間、ありがとう。 –

4

zipfile.ZipFile claims compatibility with file-like objectsを、それはほぼ確実に彼らはバイナリモードではなく、テキストモードである必要があります。

with open("498200/Broadband Data Dig - Datasets/NYC Connected Broadband Data Dig Files.zip", 
      "rb") as fp: 
    zipcontent = zipfile.ZipFile(fp) 

または折り上げ述べたように、ちょうど最初のプレーンファイルとしてそれを開くことなく、直接zipfile.ZipFile('name/of/file.zip')withステートメントを使用します。最小限の変更については

はしてみてください、修正します。

+1

ファイル形式のオブジェクトで動作する 'ZipFile'は実現しませんでした。これを指摘してくれてありがとう! –

+0

最小限の例を得るために私の例を単純化してみましたが、ここにはオリジナルがあります: 'z = zipfile.ZipFile(io.BytesIO(r.content))'、 'r'は' requests.get'オブジェクト上記のURLの場合あなたは何が起こっているのか知っていますか? –

+1

@ResMar:テストでは、正規のzipファイルから 'io.BytesIO'に渡すために実際の' bytes'オブジェクトを読み込んだ場合、 'zipfile.ZipFile'はそれで問題ありません。合法的なzipフォーマットファイルがあなたに届いていますか? 'gzip'は圧縮されていません('要求 'はあなたのためにシームレスに圧縮解除されます)、または他の圧縮ですか? 'r.content'をバイナリモードでファイルに書き込むだけで、そのファイルをzipファイルの読み込みプログラムで開くと、動作しますか? – ShadowRanger

関連する問題