簡體   English   中英

使用Python lxml連續寫入輸出文件

[英]Write continuously to output file using Python lxml

我正在將大量數據從數據庫寫入XML文件。 我正在使用Python及其lxml庫來創建文件。 我注意到它在內存中生成整個XML文件,然后在最后將它輸出到文件,有沒有辦法為每X個數據庫對象轉儲xml文件?

import lxml.etree as etree
import os

root = etree.Element('root')
db_obj1 = etree.SubElement(root, 'item')
db_obj2 = etree.SubElement(root, 'item')
db_obj3 = etree.SubElement(root, 'item')
et = etree.ElementTree(root)
et.write(sys.stdout)

我已經嘗試過使用ElemenTree()。​​write(),但是在http://lxml.de/api/lxml.etree._ElementTree-class的文檔中找不到任何設置或最佳實踐。 .html

希望減少總內存占用量。

來自lxml文檔

這是一個常見的模式,有一個或多個嵌套的element()塊,然后在循環中構建內存中的XML子樹(使用ElementTree API,構建器API,XSLT或其他)將它們寫入XML文件一個接一個地。 這樣,它們可以在構建后立即從內存中刪除,這可以大大減少應用程序的內存容量,同時保持整個XML生成簡單,安全和正確。 [強調我的]。

filename = "/tmp/somefile.xml"
with ET.xmlfile(filename, encoding='utf-8') as xf:
    xf.write_declaration(standalone=True)
    xf.write_doctype('<!DOCTYPE root SYSTEM "some.dtd">')
    with xf.element('root'):
        for value in '123':
            # construct a really complex XML tree
            el = ET.Element('item', attr=value)
            xf.write(el)
            # no longer needed, discard it right away!
            el = None

<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<!DOCTYPE root SYSTEM "some.dtd">
<root><item attr="1"/><item attr="2"/><item attr="3"/></root>

到文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM