在Python中生成非常大的XML文件?

Ken*_*itz 9 python xml lxml

有没有人知道在Python中生成非常大的xml文件(例如100-500 MiB)的内存有效方法?

我一直在使用lxml,但内存使用是通过屋顶.

Ste*_*ven 8

也许您可以使用模板引擎而不是自己生成/构建xml?

例如,Genshi是基于xml的,并支持流输出.一个非常基本的例子:

from genshi.template import MarkupTemplate

tpl_xml = '''
<doc xmlns:py="http://genshi.edgewall.org/">
<p py:for="i in data">${i}</p>
</doc>
'''

tpl = MarkupTemplate(tpl_xml)
stream = tpl.generate(data=xrange(10000000))

with open('output.xml', 'w') as f:
    stream.render(out=f)
Run Code Online (Sandbox Code Playgroud)

可能需要一段时间,但内存使用量仍然很低.

Mako模板引擎的相同示例(不是"本机"xml),但速度要快得多:

from mako.template import Template
from mako.runtime import Context

tpl_xml = '''
<doc>
% for i in data:
<p>${i}</p>
% endfor
</doc>
'''

tpl = Template(tpl_xml)

with open('output.xml', 'w') as f:
    ctx = Context(f, data=xrange(10000000))
    tpl.render_context(ctx)
Run Code Online (Sandbox Code Playgroud)

最后一个例子在我的笔记本电脑上运行了大约20秒,产生了一个(无可否认的非常简单)151 MB xml文件,完全没有内存问题.(根据Windows任务管理器,它保持不变大约10MB)

根据您的需要,这可能是比使用SAX等更友好,更快捷的生成xml的方法...查看文档以了解您可以使用这些引擎做什么(还有其他的,我刚刚选择这两个例子)