Загрузите zip файл и извлеките его в памяти с помощью Python3

Я хочу загрузить zip файл из Интернета и извлечь его.

Я предпочел бы использовать запросы. Я не хочу писать на диск.

Я знал, как это сделать в Python2, но я не знаю, для python3.3. По-видимому, zipfile.Zipfile хочет файл-подобный объект, но я не знаю, как это получить, с каких запросов возвращается.

Если вы знаете, как это сделать с помощью urllib.request, мне было бы интересно узнать, как вы это делаете.

Ответ 1

Я узнал, как это сделать:

request = requests.get(url)
file = zipfile.ZipFile(BytesIO(request.content))

Что мне не хватало:

  • request.content следует использовать для доступа к байтам
  • io.BytesIO является правильным файлоподобным объектом для bytes.

Ответ 2

Используя запросы, это можно сделать очень просто.

import requests, zipfile, StringIO
response = requests.get(zip_file_url)
zipDocument = zipfile.ZipFile(StringIO.StringIO(response.content))

С помощью String.IO вы можете создать файл-подобный объект для атрибута содержимого ответов.

Если вы хотите извлечь в каталог, вы можете использовать функцию zallFile extractall()

zipDocment.extractall()

Ответ 3

В этом случае вам понадобится еще один способ, с помощью которого вам нужно установить запросы:

    r = urllib.request.urlopen(req)
    with zipfile.ZipFile(BytesIO(r.read())) as z:
        print( z.namelist() )