gpt4 book ai didi

python - 无法使用python获取xml文件的元素值

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

我正在开发一个必须解析一些值的程序。 xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<annotation>
<folder>leaf_Haritaki</folder>
<filename>Haritaki_010001.png</filename>
<segmented>0</segmented>
<size>
<width>1456</width>
<height>2592</height>
<depth>3</depth>
</size>
<object>
<name>Haritaki</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>316</xmin>
<ymin>301</ymin>
<xmax>1179</xmax>
<ymax>1964</ymax>
</bndbox>
</object>
</annotation>

我需要解析 <xmin> <ymin> <xmax> <ymax> 的值

我已经尝试过这段代码。但我没有发现任何值(value)。

import xml.etree.ElementTree as ET
tree = ET.parse('Haritaki_010001.xml')
root = tree.getroot()

for country in root.findall('bndbox'):
name = float(country.find('xmin').text)
print(name)

它提供空白输出。有人可以帮我找到解决方案吗?

最佳答案

来自ElementTree documentation :

Element.findall() finds only elements with a tag which are direct children of the current element.

您正在搜索嵌套元素,因此 findall() 无法从根找到该元素。也就是说,除非您使用 XPath expression .

表达式.//bndbox将在树中的任何位置找到该元素。您可能想要查找并处理子元素,您可以在找到全部后从中获取名称。 .//bbndbox/* 将查找所有子元素:

>>> root.findall('.//bndbox')
[<Element 'bndbox' at 0x10c1775e8>]
>>> root.findall('.//bndbox/*')
[<Element 'xmin' at 0x10c177638>, <Element 'ymin' at 0x10c177688>, <Element 'xmax' at 0x10c1776d8>, <Element 'ymax' at 0x10c177728>]

用它来创建字典(具有字典理解);此时您甚至可以将包含的文本转换为整数:

box = {e.tag: int(e.text) for e in root.findall('.//bndbox/*')}

演示:

>>> box = {e.tag: int(e.text) for e in root.findall('.//bndbox/*')}
>>> box
{'xmin': 316, 'ymin': 301, 'xmax': 1179, 'ymax': 1964}
>>> box['xmin']
316

关于python - 无法使用python获取xml文件的元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53208221/

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