使用Python3下载并在内存中解压zip文件
我想从网上下载一个压缩文件(zip文件)并解压它。
我更想用requests这个库来做,不想把文件写到硬盘上。
我知道在Python2里怎么做,但对于Python3.3我就不知道该怎么搞了。看起来zipfile.Zipfile需要一个像文件一样的对象,但我不知道怎么从requests返回的内容中得到这个对象。
如果你知道怎么用urllib.request来做,我也很想看看你是怎么做的。
3 个回答
6
使用Requests库,这个操作可以非常简单地完成。
import requests, zipfile, StringIO
response = requests.get(zip_file_url)
zipDocument = zipfile.ZipFile(StringIO.StringIO(response.content))
通过使用String.IO,你可以创建一个类似文件的对象,用来处理响应的内容。
如果你想把文件提取到一个文件夹里,可以使用ZipFile的extractall()函数。
zipDocment.extractall()
8
这里有另一种方法,可以让你不需要安装requests库:
r = urllib.request.urlopen(req)
with zipfile.ZipFile(BytesIO(r.read())) as z:
print( z.namelist() )
41
我找到了怎么做的方法:
request = requests.get(url)
file = zipfile.ZipFile(BytesIO(request.content))
我之前缺少的东西:
request.content
应该用来获取字节数据io.BytesIO
是处理bytes
的正确文件样式对象。