gpt4 book ai didi

Python:为什么会出现这个错误?

转载 作者:行者123 更新时间:2023-12-01 05:01:22 25 4
gpt4 key购买 nike

引用这个问题:Python: In an xml, How to delete nodes within a parent node

谁能解释一下为什么我在 python 脚本中遇到这个问题。

Value Error : list.remove(x): x not in list

代码如下。

import xml.etree.cElementTree as ET

try:
tree = ET.parse('Test.xml')
root = tree.getroot()
keeper_data = ['06354237', '87654321']
instances = root.findall('./Replication/Instance')
for instance in instances:
data = instance.find('./DataSet/Data')
if data.text not in keeper_data:
root.remove(instance)

tree.write('New.xml')

except ValueError as err:
print ('Value Error : ' + str(err))

下面的 xml 示例。请注意 xml 结构与上一个问题的唯一区别是添加了包含所有标记的“Replication”标记。

<?xml version='1.0' encoding='UTF-8'?>
<Root>
<Identification>
<Description ID="12">Some text</Description>
</Identification>
<Symbols>
<Name Width="1">abc</Name>
<Name Width="2">def</Name>
</Symbols>
<Replication iRowRef="884">
<Instance RowRef="A">
<DataSet>
<Data>12345678</Data>
</DataSet>
<DataSet>
<Data>abcd</Data>
</DataSet>
<DataSet>
<Data>abcd</Data>
</DataSet>
</Instance>
<Instance RowRef="B">
<DataSet>
<Data>87654321</Data>
</DataSet>
<DataSet>
<Data>abcd</Data>
</DataSet>
<DataSet>
<Data>abcd</Data>
</DataSet>
</Instance>
<Instance RowRef="C">
<DataSet>
<Data>06354237</Data>
</DataSet>
<DataSet>
<Data>abcd</Data>
</DataSet>
<DataSet>
<Data>abcd</Data>
</DataSet>
</Instance>
</Replication>
</Root>

最佳答案

您需要使用直接节点,而不是根节点才能使用 Element.remove .

我用了lxml这里,因为ElementTree没有提供获取父节点的方法。

import lxml.etree as ET

tree = ET.parse('Test.xml')
root = tree.getroot()
keeper_data = ['06354237', '87654321']
instances = root.findall('./Replication/Instance')
for instance in instances:
data = instance.find('./DataSet/Data')
if data.text not in keeper_data:
instance.getparent().remove(instance)
...

关于Python:为什么会出现这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084901/

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