2017-01-07 6 views
1

URLからファイルを解凍しようとしましたが、次のエラーが表示されます。私は がURLの動的を取得するので、パスが変わることはありません。Errno 22無効なモード( 'rb')pythonを使用してURLからzipを解凍しています

[エラー番号22]無効モード( 'RB')またはファイル名: 'http://example.com/media/example.zip'

url = r"http://" + request.get_host() + uploaded_file_url 
    with zipfile.ZipFile(url, "r") as zip_ref: 
     zip_ref.extractall("c:/tmp") 
     zip_ref.namelist() 

上記iが解凍に使用するコードの一部です。期待通りに私はエスケープ文字を渡してURLを読むことができるようにします "IOError: [Errno 22] invalid mode ('r') or filename: 'c:\\Python27\test.txt'"

私たちはこれをURLでどうやって行うことができますか?

+0

'ZipFile'は、ローカルディスク上のファイル、またはURLではなくメモリ内のデータを必要とします。まず、インターネットからこのファイルをダウンロードする必要があります。 'ZipFile'は、(b)またはメモリ内のファイルのようなオブジェクトを作成します(使用して – furas

+0

は、私はあなたがファイルをダウンロードし、(a)のローカルファイルに保存して使用する必要が – arasub

+0

私は、同じファイルをローカルにダウンロードしてから渡す必要があるかもしれないと思います'io.StringIO'や' io.BytesIO'など)、インターネットからのデータを入力し、このファイルのようなオブジェクトを 'ZipFile' – furas

答えて

0

URLから読み込み、os.getcwd関数を呼び出して現在の作業ディレクトリを取得し、同じ関数をzip関数に渡して解凍しました。これはうまく機能しました。しかし、ファイル名に空白がある場合、コードを少しtweekする必要があります。

fullpath = os.getcwd()+ uploaded_file_url 
    fullpath = url.replace('/' , '\\') 
    with zipfile.ZipFile(fullpath , "r") as zip_ref: 
     zip_ref.extractall("c:/tmp") 
     zip_ref.namelist() 
関連する問題