Python:用lxml更新XML文件的最有效方法?
我有一个非常大的XML文件,其中包含有关网络设备的数据。每次程序迭代时,它都会修改一个网络设备条目,而保留文件的其余部分。我正在努力找到最有效的方法:Python:用lxml更新XML文件的最有效方法?,python,xml,Python,Xml,我有一个非常大的XML文件,其中包含有关网络设备的数据。每次程序迭代时,它都会修改一个网络设备条目,而保留文件的其余部分。我正在努力找到最有效的方法: 添加一个新的network_device元素,并将其附加到现有的XML文件中,而无需完全重写它(因为我认为这需要更多的资源) 更改现有网络设备元素,同时尽可能保持资源友好 到目前为止,我看到的每个示例都将整个XML文件加载到ElementTree对象的内存中,编辑树,然后将树写入文件。每个文件的容量高达数百兆字节,这是一个非常密集的过程 我正在使
CNMAAS02
10.1.1.1
CNMAAS03
10.1.1.2
#8:无法访问轮询主机的IP地址。
XML是一种文本格式,这意味着它按顺序排列,没有修改的空间。因此,任何更新都必须涉及读取文件、进行修改和写出整个文件。改进这一点的唯一方法是使用xinclude或文档实体分离记录。您可能仍然需要阅读整个文档,但只能修改包含更改节点的部分。
更多的编码,但这往往是效率的代价。我正在研究一种二进制的、n维的xml格式,这种格式对于这样的事情更有效,但需要更多的编码。如果您想知道什么是“最有效的”,您必须在不同的xml库上运行示例数据并执行一些操作。感谢您的回复。对于我的用例,您会推荐一种更好、更高效的数据存储格式吗?在这种情况下,我会使用SQL(可能是MySQL)。从SQL到XML的转换对于您的输出来说很容易,而格式的修改非常有效。我倾向于将XML用于需要任意排序和/或复杂嵌套的小型数据集。
<main>
<network_device updated="1/14/2017 10:02:45" checked="1/30/2017 18:55:30" hash="1cdf045c">
<hostname>CNMASAS02</hostname>
<management_ip>10.1.1.1</management_ip>
<serials>
<serial type="ABCD1234" hardware="somehardware" serial="XYZ1234567890"/>
<boot></boot>
</serials>
<cdp_neighbors>
<neighbor added="1/14/2017 10:02:45" ip="10.2.2.2" hostname="somedevice" platform="cisco_ios"/>
<neighbor added="1/14/2017 10:02:45" ip="10.2.2.2" hostname="somedevice" platform="cisco_ios"/>
</cdp_neighbors>
<interfaces>
</interfaces>
</network_device>
<network_device updated="1/14/2017 10:02:45" checked="1/30/2017 18:55:30" hash="1frgd432">
<hostname>CNMASAS03</hostname>
<management_ip>10.1.1.2</management_ip>
<error_code>#8: Could not access IP address to poll host.</error_code>
</network_device>
</main>