【问题标题】: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... 我希望得到我得到的印刷品

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

【问题讨论】:

    标签: python python-3.x list xml-parsing elementtree


    【解决方案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 方法返回

      【讨论】:

      • 请看我的回答,我无法将其发布为评论。谢谢
      猜你喜欢
      • 2021-07-14
      • 1970-01-01
      • 2019-08-06
      • 2023-01-18
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 2023-03-20
      相关资源
      最近更新 更多