gpt4 book ai didi

Python:加入和写入(XML.etrees)存储在列表中的树

转载 作者:数据小太阳 更新时间:2023-10-29 01:57:20 25 4
gpt4 key购买 nike

我正在遍历一些 XML 文件并生成我想存储在 defaultdict(list) 类型中的树。在每个循环中,找到的下一个 child 将存储在字典的单独部分中。

d = defaultdict(list)
counter = 0
for child in root.findall(something):
tree = ET.ElementTree(something)
d[int(x)].append(tree)
counter += 1

因此,对多个文件重复此操作会产生很好的索引结果;一组在不同解析文件中位于位置 1 的树,依此类推。问题是,我如何连接所有 d,并将树(作为累积树)写入文件?

我可以遍历字典来获取每棵树:

for x in d:
for y in d[x]:
print (y)

这给出了我字典中的树的完整列表。现在,我如何从中生成一棵大树?

Sample input file 1

Sample input file 2

Required results from 1&2

鉴于这样做的明显困难,我很乐意接受更笼统的答案,这些答案表明我可以如何从两个或更多文件中获得我正在寻找的结果。

最佳答案

使用 Spyne:

from spyne.model.primitive import *
from spyne.model.complex import *

class GpsInfo(ComplexModel):
UTC = DateTime
Latitude = Double
Longitude = Double
DopplerTime = Double
Quality = Unicode
HDOP = Unicode
Altitude = Double
Speed = Double
Heading = Double
Estimated = Boolean

class Header(ComplexModel):
Name = Unicode
Time = DateTime
SeqNo = Integer

class CTrailData(ComplexModel):
index = UnsignedInteger
gpsInfo = GpsInfo
Header = Header

class CTrail(ComplexModel):
LastError = AnyXml
MaxTrial = Integer
Trail = Array(CTrailData)

from lxml import etree
from spyne.util.xml import *

file_1 = get_xml_as_object(etree.fromstring(open('file1').read()), CTrail)
file_2 = get_xml_as_object(etree.fromstring(open('file2').read()), CTrail)
file_1.Trail.extend(file_2.Trail)
file_1.Trail.sort(key=lambda x: x.index)

elt = get_object_as_xml(file_1, no_namespace=True)
print etree.tostring(elt, pretty_print=True)

在执行此操作时,Spyne 还将数据字段从字符串转换为其 native Python 格式,因此您可以更轻松地处理此 xml 文档中的数据。

此外,如果您不介意使用 git 的最新版本,您可以执行以下操作:

class GpsInfo(ComplexModel):
# (...)
doppler_time = Double(sub_name="DopplerTime")
# (...)

这样您就可以从 CamelCased 标签中获取数据而不必违反 PEP8。

关于Python:加入和写入(XML.etrees)存储在列表中的树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19545067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com