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

时间:2015-04-24 15:27:13

标签: 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

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

1 个答案:

答案 0 :(得分:0)

那么,如何将文件下载到磁盘然后使用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()