XML文件中元素无法通过del与gc正常删除的原因排查
为什么用del和gc无法删除XML中的指定标签?
问题原因
你用del root[1][1]和gc.collect()删除XML元素无效,核心原因是:
del语句只是删除了当前变量对元素的引用,并没有从父节点的子元素集合中移除该元素。父节点(这里是<date>)仍然持有这个<day>元素的引用,所以你再次通过root[1][1]访问时,依然能从父节点的子列表中拿到它。gc.collect()只回收没有任何引用的对象,而这个<day>元素还被父节点引用着,所以垃圾回收不会处理它。
正确的删除方式
要真正移除XML元素,必须通过父节点的方法来操作子元素列表,以ElementTree库为例:
方法1:使用父节点的remove()方法
# 获取父节点<date>和要删除的<day>元素 date_node = root[1] target_day = date_node[1] # 从父节点中移除目标元素 date_node.remove(target_day)
方法2:直接删除父节点子列表中的元素
date_node = root[1] # 直接删除父节点子列表的第2个元素(索引1) del date_node[1]
执行以上任意一种操作后,再访问root[1][1]就会发现目标<day>元素已经被移除了。
内容的提问来源于stack exchange,提问作者Maayan
相关产品推荐
相关产品推荐

