[英]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.