使用Python3下载并在内存中解压zip文件

18 投票
3 回答
19315 浏览
提问于 2025-04-18 05:04

我想从网上下载一个压缩文件(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 的正确文件样式对象。

撰写回答