我想从互联网下载一个zip文件并解压它。
我宁愿使用requests,不想写入磁盘。
我知道如何在Python2中做到这一点,但对于Python3.3,我一无所知。显然,zipfile.Zipfile需要一个类似文件的对象,但我不知道如何从requests返回的内容中获取它。
如果您知道如何使用urllib.request完成此操作,我也很想看看您是如何实现的。
我想从互联网下载一个zip文件并解压它。
我宁愿使用requests,不想写入磁盘。
我知道如何在Python2中做到这一点,但对于Python3.3,我一无所知。显然,zipfile.Zipfile需要一个类似文件的对象,但我不知道如何从requests返回的内容中获取它。
如果您知道如何使用urllib.request完成此操作,我也很想看看您是如何实现的。
我找到了如何做到这一点:
request = requests.get(url)
file = zipfile.ZipFile(BytesIO(request.content))
我缺少的是:
request.content
来访问字节数据io.BytesIO
是正确的用于 bytes
的文件对象。这里有另一种方法,可以避免您安装requests:
r = urllib.request.urlopen(req)
with zipfile.ZipFile(BytesIO(r.read())) as z:
print( z.namelist() )
requests
库的要求。 - Bojan P.import requests, zipfile, StringIO
response = requests.get(zip_file_url)
zipDocument = zipfile.ZipFile(StringIO.StringIO(response.content))
zipDocment.extractall()
ZipFile
和response.content
都需要bytes。使用io.ByteIO
即可。 - dbrzipDocument.extractall()
和io.BytesIO
。即,zipfile.ZipFile(io.BytesIO(response.content))
(注意:无法编辑答案)。 - Michal Skop
zipDocument = zipfile.ZipFile(io.BytesIO(request.content))
然后提取/保存它:zipDocument.extractall()
。 - Michal Skop