如何从下载的zip中获取文件列表而不将整个zip文件加载到内存中?

use*_*197 5 python zip

我正在开发一个在App Engine上运行的脚本,因此我需要遵守RAM限制(特定于限制为1024 MB的app引擎).

我正在下载一个大型存档,我需要从中提取文件列表.存档本身只是我存储的文件,以供以后离线使用(如果需要),但我需要文件列表,因为每次拉动它时我都在搜索zip存档中的更改.

这是我现在的代码块:

url = 'http://url.to/archive.zip'
r = requests.get(url)
file_mem = StringIO.StringIO(r.content)
zip_file = zipfile.ZipFile(file_mem, 'r')

# get the list of files
file_list = zip_file.namelist() # list of files -- stored in memory
Run Code Online (Sandbox Code Playgroud)

使用该StringIO对象,它将整个存档放入内存中.有没有办法我可以从我的r.content对象转到文件列表而不会立即将整个文件放入内存?

Jos*_*idt 1

那么,如何将文件下载到磁盘,然后使用 zipfile 模块在那里解析它——应该可以让您不必将 .zip 内容全部保留在内存中,并且希望在小型 App Engine 实例上正常工作。

import zipfile
import urllib

url = 'http://url.to/archive.zip'
urllib.urlretrieve(url, 'archive.zip')

with zipfile.ZipFile('archive.zip', 'r') as myzip:
    print myzip.namelist()
Run Code Online (Sandbox Code Playgroud)