重命名 lxml 中的对象
Rename object in lxml
假设我们有一个这样的 xml 文件:
<annotation verified="yes">
<folder>Annotation</folder>
<filename>test_file</filename>
<path>voc/JPEGImages/test_file</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>640</width>
<height>480</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>old_name</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>15</xmin>
<ymin>164</ymin>
<xmax>206</xmax>
<ymax>344</ymax>
</bndbox>
</object>
</annotation>
现在我想更改给定 xml 文件中所有对象的名称。
我写了下面的函数:
def _rename_objects(tree, path, new_name="new_name"):
root = tree.getroot()
for rank in root.iter('object'):
rank.text = str(new_name)
tree.write(path)
它的作用是将文本放置到对象中。如何替换 'name' 中的值?不幸的是,树元素并不能真正打印出来进行调试。
<Element 'object' at 0x11235d400>
_rename_objects
之后的新值如下所示:
<segmented>0</segmented>
<object>new_name<name>old_name</name>
<pose>Unspecified</pose>
您需要使用 [0]
索引来获取节点内容而不是节点本身。
rank <Element object>
rank[0] <Element name>
for rank in root.iter("object"):
rank[0].text = str(new_name)
输出:
<name>new_name</name>
假设我们有一个这样的 xml 文件:
<annotation verified="yes">
<folder>Annotation</folder>
<filename>test_file</filename>
<path>voc/JPEGImages/test_file</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>640</width>
<height>480</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>old_name</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>15</xmin>
<ymin>164</ymin>
<xmax>206</xmax>
<ymax>344</ymax>
</bndbox>
</object>
</annotation>
现在我想更改给定 xml 文件中所有对象的名称。
我写了下面的函数:
def _rename_objects(tree, path, new_name="new_name"):
root = tree.getroot()
for rank in root.iter('object'):
rank.text = str(new_name)
tree.write(path)
它的作用是将文本放置到对象中。如何替换 'name' 中的值?不幸的是,树元素并不能真正打印出来进行调试。
<Element 'object' at 0x11235d400>
_rename_objects
之后的新值如下所示:
<segmented>0</segmented>
<object>new_name<name>old_name</name>
<pose>Unspecified</pose>
您需要使用 [0]
索引来获取节点内容而不是节点本身。
rank <Element object>
rank[0] <Element name>
for rank in root.iter("object"):
rank[0].text = str(new_name)
输出:
<name>new_name</name>