[英]writing xml to file python multiple times
我似乎被困住了。 我正在嘗試從我的python代碼生成的xml進行多次迭代。 它僅將最新的迭代寫入文件。
這是我的代碼:
import xml.etree.cElementTree as ET
from random import randint
i=5
while i>-4:
event = ET.Element("event")
event.set("class", "rer")
event.set("id", "EV_%d" % (i))
event.set("date", "${ev_d}")
loc = ET.SubElement(event, "loc")
flir = ET.SubElement(loc, "flir")
de = ET.SubElement(flir, "de")
de.set("dist", "km")
de.set("val", "%d" % (randint(0,2)))
i -=1
tree = ET.ElementTree(event)
tree.write("test.xml")
我得到的是:
<event class="rer" date="${ev_d}" id="EV_-3">
<loc>
<flir>
<de dist="km" val="0" />
</flir>
</loc>
</event>
我想要在輸出文件中:
<event class="rer" date="${ev_d}" id="EV_5">
<loc>
<flir>
<de dist="km" val="0" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_4">
<loc>
<flir>
<de dist="km" val="0" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_3">
<loc>
<flir>
<de dist="km" val="0" />
</flir>
</loc>
</event>
在此先感謝您的幫助。
問候,功績_2
您會不斷地在while循環中覆蓋事件-因此自然而然地,您只有正在打印的事件。 您需要執行以下操作:
import xml.etree.cElementTree as ET
from random import randint
i = 5
events = []
while i > -4:
event = ET.Element("event")
event.set("class", "rer")
event.set("id", "EV_%d" % (i))
event.set("date", "${ev_d}")
loc = ET.SubElement(event, "loc")
flir = ET.SubElement(loc, "flir")
de = ET.SubElement(flir, "de")
de.set("dist", "km")
de.set("val", "%d" % (randint(0, 2)))
events.append(event)
i -= 1
with open('output.xml', 'w') as out:
for event in events:
tree = ET.ElementTree(event)
tree.write(out)
out.write('\n')
正如@jwodder指出的那樣,您建議的輸出不是有效的XML。 您的選擇是修復或解決它。 因為您提到這只是一個組件,所以如果您有一個將每個<event>
嵌套在其下的父元素,則可以采用這種方法。
import xml.etree.cElementTree as ET
from random import randint
parent = ET.Element("parent")
tree = ET.ElementTree(parent)
i=5
while i>-4:
event = ET.Element("event")
event.set("class", "rer")
event.set("id", "EV_%d" % (i))
event.set("date", "${ev_d}")
loc = ET.SubElement(event, "loc")
flir = ET.SubElement(loc, "flir")
de = ET.SubElement(flir, "de")
de.set("dist", "km")
de.set("val", "%d" % (randint(0,2)))
i -=1
parent.append(event)
tree.write("test.xml")
在這里,我添加了父元素, append
-ed事件添加到父元素,然后將父樹寫到文件末尾。
輸出:
<parent>
<event class="rer" date="${ev_d}" id="EV_5">
<loc>
<flir>
<de dist="km" val="1" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_4">
<loc>
<flir>
<de dist="km" val="2" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_3">
<loc>
<flir>
<de dist="km" val="2" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_2">
<loc>
<flir>
<de dist="km" val="1" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_1">
<loc>
<flir>
<de dist="km" val="2" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_0">
<loc>
<flir>
<de dist="km" val="0" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_-1">
<loc>
<flir>
<de dist="km" val="2" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_-2">
<loc>
<flir>
<de dist="km" val="0" />
</flir>
</loc>
</event>
<event class="rer" date="${ev_d}" id="EV_-3">
<loc>
<flir>
<de dist="km" val="2" />
</flir>
</loc>
</event>
</parent>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.