Python:用lxml更新XML文件的最有效方法?

Python:用lxml更新XML文件的最有效方法?,python,xml,Python,Xml,我有一个非常大的XML文件,其中包含有关网络设备的数据。每次程序迭代时,它都会修改一个网络设备条目,而保留文件的其余部分。我正在努力找到最有效的方法: 添加一个新的network_device元素,并将其附加到现有的XML文件中,而无需完全重写它(因为我认为这需要更多的资源) 更改现有网络设备元素,同时尽可能保持资源友好 到目前为止,我看到的每个示例都将整个XML文件加载到ElementTree对象的内存中,编辑树,然后将树写入文件。每个文件的容量高达数百兆字节,这是一个非常密集的过程 我正在使

我有一个非常大的XML文件,其中包含有关网络设备的数据。每次程序迭代时,它都会修改一个网络设备条目,而保留文件的其余部分。我正在努力找到最有效的方法:

  • 添加一个新的network_device元素,并将其附加到现有的XML文件中,而无需完全重写它(因为我认为这需要更多的资源)
  • 更改现有网络设备元素,同时尽可能保持资源友好
  • 到目前为止,我看到的每个示例都将整个XML文件加载到ElementTree对象的内存中,编辑树,然后将树写入文件。每个文件的容量高达数百兆字节,这是一个非常密集的过程

    我正在使用lxml库来实现这一点,但如果有更好的方法,我不会固守这个想法


    
    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>