Загрузите 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() )