我正在读取一个xml文件,其中包含以下类型的行:
<PLAYER_NAME>Andrew Tell</PLAYER_NAME>
我想从文件中提取所有名称,并且尝试了:
name = (line.strip()
.lstrip('<PLAYER_NAME>')
.rstrip('</PLAYER_NAME>'))
和
name = line.strip()
name = name.lstrip('<PLAYER_NAME>')
name = name.rstrip('</PLAYER_NAME>')
这些功能适用于某些名称,但是如果名称以以下任何一个开头: A,E,L,M,N,R,Y(以及其他一些字符)也将被删除,因此在上面的示例中我得到了“ ndrew Tell”,但William Tell很好。我尚未测试过完整的字母,但我确实知道以B,C,D,H,I,J,S,T,W中任何一个开头的名称都可以正确提取
我不得不求助于丑陋的人
namebits = line.split('>',1)
name = namebits[-1].split('<')[0]
这似乎适用于所有名称。
这是s.lstrip的已知问题,还是我做错了什么?
答案 0 :(得分:3)
对XML使用XML解析器。其他方法都被破坏了。
幸运的是,Python内置了XML解析器,使用起来很简单。它可能比您当前的代码更容易。
import xml.etree.ElementTree as ET
tree = ET.parse('your_file.xml')
player_name = tree.find('.//PLAYER_NAME')
print(player_name.text)
读取文件search element,获取文本。无需笨拙的字符串操作。假设此XML文件:
<PLAYER>
<PLAYER_NAME>Andrew Tell</PLAYER_NAME>
</PLAYER>
输出令人惊讶:
Andrew Tell
答案 1 :(得分:0)