我正在开发一个在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
对象转到文件列表而不会立即将整个文件放入内存?
答案 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()