如何在不将整个zip文件加载到内存中的情况下获取已下载的zip文件列表?

5
我正在编写一个在App Engine上运行的脚本,因此我需要遵守RAM限制(特定于应用程序引擎,该限制为1024 MB)。
我正在下载一个大型存档文件,需要从中提取文件列表。存档文件本身只是我为以后离线使用而存储的文件(如果需要),但每次拉取它时,我需要文件列表,因为我正在搜索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个回答

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接