【问题标题】:Why can't I cast an lxml.etree._ElementUnicodeResult to a string?为什么我不能将 lxml.etree._ElementUnicodeResult 转换为字符串?
【发布时间】:2018-09-22 20:04:02
【问题描述】:
print(type(players[1]))


for player in players:
    player = str(player)

print(type(players[1]))

输出是:

 <class 'lxml.etree._ElementUnicodeResult'>
 <class 'lxml.etree._ElementUnicodeResult'>

我需要将此 ElementUnicode 对象转换为字符串,以便可以在其上调用子字符串,但这个 for 循环并没有这样做。而当我将其转换为字符串并同时调用 substring 时,控制台显示:str object has no object substring,这是没有意义的。

 str(players[i]).substring()

对为什么会出现这种情况以及我如何能够在这个对象上调用子字符串有什么想法吗?

【问题讨论】:

    标签: python html xpath lxml


    【解决方案1】:

    _ElementUnicodeResult 转换为str 不是问题。完整演示:

    from lxml import etree
    
    doc = """
    <root>
     <player>ABC</player>
     <player>DEF</player>
    </root>"""
    
    root = etree.fromstring(doc)
    players = root.xpath("player/text()")
    
    print(type(players[1]))
    
    # Cast each player to a plain string 
    players = [str(p) for p in players]
    
    print(type(players[1]))
    

    输出:

    <class 'lxml.etree._ElementUnicodeResult'>
    <class 'str'>
    

    在问题中,您有以下代码:

    for player in players:
        player = str(player)
    
    print(type(players[1]))
    

    这不会改变for 循环之外的任何内容。 type(players[1]) 将与以前相同。

    另外,str确实没有substring属性。 XPath 有一个substring() 函数。也许这就是你的想法?

    【讨论】:

    • 这是在高中的时候,所以我忘记了与这个问题的上下文有关的一切。你的答案似乎是正确的,所以这里是一个接受
    【解决方案2】:

    如果您正在运行 python2,请尝试:unicode(players[i])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2018-10-26
      • 2016-03-11
      相关资源
      最近更新 更多