解析数据集的字符串

Pet*_*lle 1 python string parsing

我有一个长字符串,其中包含需要分离/提取以供评估的信息集.

作为初学程序员,我知道各种解析操作,如split()append()remove()等 - 但我正在努力想出一种逻辑方法将它们组合起来以提取相关数据......

长串......

"<Sets X="s"><B s="1" e="2176" t="-2.0774E4" r="1" /><B s="2177" e="8982" t="-1.8597E4" r="1" /><B s="8983" e="10393" t="-150.22" r="1" /></Sets>"
Run Code Online (Sandbox Code Playgroud)

包含3组需要存储为浮点值的数据

[Set1] s = 1 e = 2176 t = -20774 r = 1

[Set2] s = 2177 e = 8982 t = -18597 r = 1

[Set3] s = 8983 e = 10393 t = -150.2 r = 1

我想将每组数据存储为列表

Set1 = [1,2176,-20774,1]
Set2 = [2177,8982,-18597,1]
Set3 = [2178,10393,-150.2,1]
Run Code Online (Sandbox Code Playgroud)

注意:套数可以变化

ale*_*cxe 6

使用内置的ElementTree库从xml中提取数据:

import xml.etree.ElementTree as ET


data = '<Sets X="s"><B s="1" e="2176" t="-2.0774E4" r="1" /><B s="2177" e="8982" t="-1.8597E4" r="1" /><B s="8983" e="10393" t="-150.22" r="1" /></Sets>'

tree = ET.fromstring(data)
for b in tree.findall('.//B'):
     print map(float, itemgetter(*'setr')(b.attrib))
Run Code Online (Sandbox Code Playgroud)

打印:

[1.0, 2176.0, -20774.0, 1.0]
[2177.0, 8982.0, -18597.0, 1.0]
[8983.0, 10393.0, -150.22, 1.0]
Run Code Online (Sandbox Code Playgroud)

  • 好吧,Python的强大功能来自于导入适当的库 - 无论它们是否内置(例如`xml`和`operator`或者第三方`numpy`)......没有一个心智正常的人会尝试使用你的字符串解析你的字符串正常的'str`操作......它很痛苦,冗长,容易破坏,让人们想对你做坏事:) @PeteLavelle (3认同)
  • 我会使你的打印更好并使用`operator.itemgetter` - 例如:`map(float,itemgetter(*'set')(b.attrib))`(但将getter移出到更合适的位置) (2认同)