Print 'element' in list 返回一个 <Element 'element 1' at 0x0000013C6D4B9270>

Posted

技术标签:

【中文标题】Print \'element\' in list 返回一个 <Element \'element 1\' at 0x0000013C6D4B9270>【英文标题】:Print 'element1' in list returms an <Element 'element1' at 0x0000013C6D4B9270>Print 'element' in list 返回一个 <Element 'element 1' at 0x0000013C6D4B9270> 【发布时间】:2021-12-31 14:56:45 【问题描述】:

我最近开始学习 python,但我的代码有问题。 我正在尝试使用具有以下形式的 elementtree 解析 xml:

<UNHEATED_ROWS>6</UNHEATED_ROWS>
    <UNHEATED1 rid="1">
    </UNHEATED1>
    <UNHEATED2 rid="1">
    </UNHEATED2>
    <UNHEATED3 rid="1">
    </UNHEATED3>
    <UNHEATED4 rid="1">
    </UNHEATED4>
    <UNHEATED5 rid="1">
    </UNHEATED5>
    <UNHEATED6 rid="1">

用这个:

for i in range root.iter('UNHEATED_ROWS'):
   uheatedzones = UNHEATED_ROWS.text
for j in range uheatedzones:
   uzones.append("UNHEATED" + str(j+1)):
for k in range(int(uheatedzones)):
   for uzones[k] in root.iter("UNHEATED%s" % (k+1)):
       print(uzones[k])

而不是 UNHEATED1,UNHEATED2... 我希望得到我得到的印刷品

我的代码有什么问题? 谢谢

【问题讨论】:

【参考方案1】:

谢谢你的回答。

<UNHEATED1 rid="1">
            <un_parameter1>82.8</un_parameter1>
            <un_parameter2>123.3720</un_parameter2>
            <ENVELOPE rid="1">
                <opaque_rows>17</opaque_rows>
                
                <transparent_column5>0.600,2.200,0.600,</transparent_column5>
                <transparent_column6>Α1,Α2,Α10,</transparent_column6>
                >
            </ENVELOPE>
</UNHEATED1>

每个 UNHEATED 都有类似的结构,我想访问所有 UNHEATED,这就是我使用循环的原因

【讨论】:

【参考方案2】:

要获取单个元素的文本,不要使用任何循环。 改用:

root.findtext('UNHEATED_ROWS')

但是请注意,返回的值是一个字符串,而不是整数。

您的代码中的另一个缺陷是str(j+1)

第一个错误是 jElement 类的对象 并且其转换为字符串不会返回其文本。

第二个错误是j+1,即你试图将1添加到这个对象。

要正确处理每个 UNHEATED… 元素,您可以例如使用 root.iter() (不带参数)并在循环中检查标签名称是否以 “UNHEATED”,然后它包含一个数字(省略 UNHEATED_ROWS 元素)。 您必须导入 re 模块。

如果你想访问一个元素的属性,使用 attrib 方法 一个元素,它返回一个字典 (attr_name: attr_value)。

所以示例循环可以是:

i = 0
for it in root.iter():
    if re.match(r'UNHEATED\d', it.tag):
        i += 1
        print(f'i: it.tag: it.attrib["rid"]')

对于您的源 XML,它会打印:

1: UNHEATED1: 1
2: UNHEATED2: 1
3: UNHEATED3: 1
4: UNHEATED4: 1
5: UNHEATED5: 1
6: UNHEATED6: 1

还要注意,我在上面的循环中没有使用it.text,因为每个 UNHEATED... 元素没有文本,在这种情况下 text 方法返回

【讨论】:

请看我的回答,我无法将其发布为评论。谢谢

以上是关于Print 'element' in list 返回一个 <Element 'element 1' at 0x0000013C6D4B9270>的主要内容,如果未能解决你的问题,请参考以下文章

[Groovy] How to check if element in groovy array/hash/collection/list?

How to add elements to a List in Scala

[React] Return a list of elements from a functional component in React

RuntimeError: each element in list of batch should be of equal size

集合(set)的一些常用方法

230. Kth Smallest Element in a BST