gpt4 book ai didi

Python ElementTree - 插入元素的副本

转载 作者:数据小太阳 更新时间:2023-10-29 02:36:06 28 4
gpt4 key购买 nike

我有以下 xml 代码:

<data factor="1" name="ini" value="342" />

我想复制相同的信息,但名称不同。即,最终输出应该是:

<data factor="1" name="ini" value="342" />
<data factor="1" name="raw_ini" value="342" />

我尝试执行以下操作:

model_tag = tree.findall(data_path) #I make sure that data_path is correct.
len_tags = len(model_tag)
i = 0
while i < len_tags:
tipo_tag = model_tag[i]
if tipo_tag.attrib['name']=='ini':
aux_tag = copy.deepcopy(tipo_tag) #I tried also with copy.copy(tipo_tag).
aux_tag.attrib['name'] = 'raw_ini'
model_tag.append(aux_tag)

tree.write(dir_output)

如果我使用“copy.deepcopy”,我就没有额外的元素。输出是:

<data factor="1" name="ini" value="342" />

如果我使用“copy.copy”,只需更改元素的名称。输出是:

<data factor="1" name="raw_ini" value="342" />

知道我做错了什么吗?

最佳答案

您必须获取那些 data 元素的父级并使用 Element.insert(index, element) 方法。

此外,您需要使用deepcopy 而不仅仅是copy。不同之处在于 deepcopy 创建了第二个对象,而通过使用 copy (它返回对象的 shallow 副本)你将只是修改第一个元素(正如您所想的那样)。

假设您将 dataParent 作为 data 元素的父元素。

listData = dataParent.findall('data')
lenData = len(listData)
i = 0
while i < lenData:
if listData[i].attrib['name'] == 'ini':
copyElem = copy.deepcopy(dataElem)
copyElem['name'] = 'raw_ini'
dataParent.insert([index you wish], copyElem)
i += 1

关于Python ElementTree - 插入元素的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527399/

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