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

如何从Python快速流式传输XML输出,python,xml,sax,Python,Xml,Sax,迭代编写XML文件的快速方法是什么(即,不将整个文档存储在内存中)xml.sax.saxutils.XMLGenerator可以工作,但速度很慢,在I7机器上大约为1MB/s。这里是一个。我意识到这个问题已经提出了一段时间,但与此同时,引入了一个lxmlAPI,在解决这个问题方面看起来很有希望:;具体来说,请参阅以下部分:“增量XML生成” 我很快通过流式传输一个10M文件对它进行了测试,就像在你的基准测试中一样,在我的旧笔记本电脑上只花了几分之一秒,这绝对不是很科学,但与你的generate\

迭代编写XML文件的快速方法是什么(即,不将整个文档存储在内存中)
xml.sax.saxutils.XMLGenerator
可以工作,但速度很慢,在I7机器上大约为1MB/s。这里是一个。

我意识到这个问题已经提出了一段时间,但与此同时,引入了一个
lxml
API,在解决这个问题方面看起来很有希望:;具体来说,请参阅以下部分:“增量XML生成”

我很快通过流式传输一个10M文件对它进行了测试,就像在你的基准测试中一样,在我的旧笔记本电脑上只花了几分之一秒,这绝对不是很科学,但与你的
generate\u large\u xml()
函数大致相同。

如前所述,
lxml
realy提供了以流方式生成XML文档的API

下面是一个工作示例:

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)
生成的XML如下所示(从一行XML文档重新格式化的内容):


根文本
记录文本数据
记录文本数据
记录文本数据
记录文本数据
记录文本数据
记录文本数据
记录文本数据
记录文本数据
记录文本数据
记录文本数据
<?xml version="1.0"?>
<root text="att text" tag="bagggg" published="now">root text
    <record id="0">record text data</record>
    <record id="1">record text data</record>
    <record id="2">record text data</record>
    <record id="3">record text data</record>
    <record id="4">record text data</record>
    <record id="5">record text data</record>
    <record id="6">record text data</record>
    <record id="7">record text data</record>
    <record id="8">record text data</record>
    <record id="9">record text data</record>
</root>