use*_*740 13 python python-3.x python-3.3 python-requests
我想从互联网上下载一个zip文件并将其解压缩.
我宁愿使用请求.我不想写入磁盘.
我知道如何在Python2中做到这一点,但我对python3.3毫无头绪.显然,zipfile.Zipfile需要一个类似文件的对象,但我不知道如何从请求返回的内容中获取该对象.
如果你知道如何用urllib.request做这件事,我很想知道你是怎么做的.
use*_*740 33
我发现了怎么做:
request = requests.get(url)
file = zipfile.ZipFile(BytesIO(request.content))
Run Code Online (Sandbox Code Playgroud)
我错过了什么:
request.content 应该用来访问字节io.BytesIO是正确的文件类对象bytes.使用请求,这可以非常简单地完成.
import requests, zipfile, StringIO
response = requests.get(zip_file_url)
zipDocument = zipfile.ZipFile(StringIO.StringIO(response.content))
Run Code Online (Sandbox Code Playgroud)
使用String.IO,您可以为响应内容属性创建类似文件的对象.
如果要提取到目录,可以使用ZipFile的extractall()函数
zipDocment.extractall()
Run Code Online (Sandbox Code Playgroud)
这是另一种方法,可以节省您安装请求的时间:
r = urllib.request.urlopen(req)
with zipfile.ZipFile(BytesIO(r.read())) as z:
print( z.namelist() )
Run Code Online (Sandbox Code Playgroud)