如何在 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]
我有一个这样的标签列表:
<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]