我想从互联网上下载一个zip文件并将其解压缩。
我宁愿使用请求。我不想写入磁盘。
我知道如何在Python2中做到这一点,但我对python3.3毫无头绪。显然,zipfile.Zipfile需要一个类似文件的对象,但我不知道如何从请求返回的内容中获取它。
如果您知道如何使用urllib.request,我很想知道您是如何做到的。
答案 0 :(得分:31)
我发现了怎么做:
request = requests.get(url)
file = zipfile.ZipFile(BytesIO(request.content))
我缺少什么:
request.content
应该用于访问字节io.BytesIO
是bytes
的正确文件对象。答案 1 :(得分:5)
使用请求,这可以非常简单地完成。
import requests, zipfile, StringIO
response = requests.get(zip_file_url)
zipDocument = zipfile.ZipFile(StringIO.StringIO(response.content))
使用String.IO,您可以为响应内容属性创建类似文件的对象。
如果要提取到目录,可以使用ZipFile的extractall()函数
zipDocment.extractall()
答案 2 :(得分:5)
这是另一种节省您必须安装请求的方法:
r = urllib.request.urlopen(req)
with zipfile.ZipFile(BytesIO(r.read())) as z:
print( z.namelist() )