我正在处理一个需要处理大型 XML 文件的项目。在使用 Python 时,我不可避免地遇到了 Liza Daly 的文章http://www.ibm.com/developerworks/library/x-hiperfparse/。但是,我不明白她的 fast_iter 函数中的一行的细节:
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
为什么使用 while 循环而不是 if 语句?怎么可能有不止一个先前的元素?
编辑:我忘了提到我只在一个我无法阅读的网站上看到了一个 if 版本,无论如何,http://jsome.net/blog/2010/08/18/handle-large-xml-with-python . 似乎几乎所有其他人都按原样使用 fast_iter。
如果我可以再问一个相关的问题......
对于我的项目,我发现只需添加 elem.clear() 即可将内存占用从 17+ GB 减少到 60 MB。进一步添加
while elem.getprevious() is not None:
del elem.getparent()[0]
仅将其减少到 40 MB。我还没有将我的上下文保存在变量中,所以我还没有尝试添加“del context”。无论哪种方式,60 MB 和 40 MB 对我来说都可以忽略不计。我有理由继续添加有问题的代码吗?
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
预先感谢您的帮助!