也许您可以使用模板引擎而不是自己生成/构建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的方法...查看文档以了解您可以使用这些引擎做什么(还有其他的,我刚刚选择这两个例子)