如何在 python 中 "split" XML 数据中的多个(数字)值?

How to "split" the multiple (numeric) values in XML data, in python?

我有一个这样的标签列表:

<duet pair="2,1;3,2;4,5;" day="1;7;9" type="YES"/>
<duet pair="2,4;1,6;2,0;" day="2;5;8" type="NO"/>

这些是想要的(type = yes)或不需要的(type = no)配对,但想象一下有各种组合和更多的属性可供过滤,但我将 post 只有这些来回答我的问题。在这个例子中,让我们说第一个,我想检查和比较(基于已经有的时间表)是否有任何一对(2,1),(3,2)或(4,5)计划在第 1 天、第 7 天或第 9 天中的任何一天在一起。因此,我想将 pair 属性的值和 day 属性的值分开以继续我的计算。

我通过使用 .get 获取值并用“;”拆分它来尝试以下操作

for i in root.findall("./duet/[@type='YES']"):
   meeting = i.get("pair")
   day = i.get("day")
   meeting_split = meeting.split(';')
   day_split = day.split(';')
   print("The pairs ",meeting_split)
   print("The days ", day_split)

我得到的结果如下

The pairs  ['2,1', '3,2', '4,5', '']
The days ['1', '7', '9']

我发现上面有 2 个问题。 1. 这些是字符串 2. 对列表在列表末尾给了我 '' (???) 。 我想要的是对最好是一个元组列表,而天数是一个整数列表。 使用 i.get ,我获得了属性的全部值,但我不知道“获得”该值的任何其他方法。当然我不能 int(day.split()),因为拆分结果是一个列表。

我该怎么做?要么将这些数据实际制作成int/tuples,要么从属性中一个一个地取值。

你将在末尾有空的 space,因为你的字符串以分隔符结尾。您可以使用 [:-1] 分割字符串并在逗号上拆分每个子字符串,将其映射到它。

另一种更简单,将int映射到split即可。

meeting = '2,1;3,2;4,5;'
day = "1;7;9"

meeting_split = [tuple(map(int,x.split(','))) for x in meeting.split(';')[:-1]]
day_split = list(map(int,day.split(';')))

print(meeting_split, day_split, sep='\n')

输出

[(2, 1), (3, 2), (4, 5)]
[1, 7, 9]