如何从Python快速流式传输XML输出

时间:2013-10-21 18:58:20

标签: python xml sax

迭代编写XML文件的快速方法是什么(即没有将整个文档放在内存中)? xml.sax.saxutils.XMLGenerator工作但很慢,在I7机器上大约1MB / s。这是test case

2 个答案:

答案 0 :(得分:3)

我意识到这个问题已经被问过了一段时间,但是,同时引入了lxml API,在解决问题方面看起来很有希望:http://lxml.de/api.html;具体来说,请参阅以下部分:“增量XML生成”。

我通过像你的基准测试那样流式传输一个10M文件来快速测试它,并且在我的旧笔记本电脑上花了不到一秒钟,这绝不是非常科学的,但它与你的{{ 1}}功能。

答案 1 :(得分:1)

正如Yury V. Zaytsev所述,[ { socket object }, { socket object } ] 真正提供了以流方式生成XML文档的API

以下是工作示例:

lxml

生成的XML看起来像这样(从单行XML文档重新格式化的内容):

from lxml import etree

fname = "streamed.xml"
with open(fname, "w") as f, etree.xmlfile(f) as xf:
    attribs = {"tag": "bagggg", "text": "att text", "published": "now"}
    with xf.element("root", attribs):
        xf.write("root text\n")
        for i in xrange(10):
            rec = etree.Element("record", id=str(i))
            rec.text = "record text data"
            xf.write(rec)