首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何快速地从Python流XML输出

如何快速地从Python流XML输出
EN

Stack Overflow用户
提问于 2013-10-21 18:58:20
回答 2查看 2.6K关注 0票数 5

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-04 12:51:16

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

我很快测试了它,就像在你的基准测试中一样,我用了10M文件,在我的旧笔记本电脑上花了一小会儿时间,这一点也不太科学,但与你的generate_large_xml()功能差不多。

票数 4
EN

Stack Overflow用户

发布于 2016-05-01 14:21:00

正如尤里·V·扎伊采夫所提到的,lxml realy提供了以流式方式生成XML文档的API。

下面是一个工作示例:

代码语言:javascript
复制
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文档中重新格式化):

代码语言:javascript
复制
<?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>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19502503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档