1

我为我的工作创建了一个小工具,它解析 xml 文件以查找元素的文本;示例代码:

import xml.etree.cElementTree as Etree


def open_xml():
    """
    Retrieves info from the xml file
    """
    try:
        tree = Etree.parse("xml_file.xml")
        text_to_find = tree.findtext(
            path=".//ns:some_element",
            namespaces={"ns": "http://something.com/something"})
        print text_to_find

    except IOError:
        print "No xml file found."

这是 gui 的一部分;我们从不关闭应用程序,它始终在专用计算机上运行。

如果我理解正确,python 在内存中创建一个表示 xml 树的对象。我的问题是:打印完信息后是否需要清除该对象的内存?我担心每次解析 xml 文件时都会使用越来越多的内存......

4

1 回答 1

2

不,据我所知,你不必担心。鉴于引用cElementTree实例的唯一变量是变量tree,那么实例将在tree超出范围后立即被删除。要进行实验,您可以定义一个class在删除时打印某些内容的方法,以便您知道何时发生删除,例如此处发布的内容:

class C:
    def __del__(self):
        print "delete object"

然后使用在与变量相同范围内声明的变量引用该类的实例tree

def open_xml():
    ....
    try:
        tree = Etree.parse("xml_file.xml")
        c = C()
        ....

这样,您可以tree通过删除引用的实例来预测删除引用的实例c,因为它们是在同一范围内声明的。现在观看并查看是否"delete object"打印到您的控制台。

于 2016-01-25T01:43:15.177 回答