我正在尝试拆分字符串,我得到 ValueError:需要多于1个值来解压
我想我明白了,为什么会出现这种错误,这是因为没有价值可以拆分吗?
基本上我有for循环从xml返回字符串
for channel in tree.findall("channel"):
title = channel.find('title').text
channelname,tvguide = title.split("[")
print(channelname,tvguide)
当我打印出标题时,我有这样的东西:
BeIN Sports 1HD [07:00 - 07:30] + 106.8 min Auto Mundial
BeIN Sports 2HD ValueError发生在这里?
BeIN Sports 3HD [23:00 - 02:00] + 1216.8 min Torino FC VS美国Citta di Palermo - 意大利联赛(意甲)
BeIN Sports 4HD ValueError发生在这里?
BeIN Sports 5HD [05:30 - 07:15] + 91.8分钟Olympique de Marseille VS Angers - 法国联赛1 2015 - 2016第7周
我的问题是,如何修复循环以便将所有标题拆分为channelname& tvguide即使一些字符串不包含tvguide?
例如,在没有tvguide的频道中(在本例中是BeIN Sports 2HD,BeIN Sports 4HD),它应该制作tvguide =" "或类似的东西。
任何想法的人?
答案 0 :(得分:1)
为什么不使用split
方法返回的列表,而不是单独尝试分配channelname和tvguide。
for channel in tree.findall("channel"):
title = channel.find('title').text
description = title.split("[")
print description
这样你就不必担心频道是否有名字或tvguide,但要确保你在频道对象中得到一个字符串。
as Jon Clements suggested, we still need to figure out if its allowed to access description[1] and as he suggested an elegant way to do is str.partition
for channel in tree.findall("channel"):
title = channel.find('title').text
description = title.partition("[") # you get a tuple with three elements head, separator and tail.
#head is the portion before the separator, separator itself and tail the rest of the portion of the string
print description
答案 1 :(得分:1)
您可以使用简单的if else
。
x="BeIN Sports 1HD [07:00 - 07:30] + 106.8 min Auto Mundial"
y="BeIN Sports 2H"
ll=[]
ll.append(x)
ll.append(y)
final = [(i,"") if "[" not in i else i.split("[") for i in ll]
print final
输出:[['BeIN Sports 1HD ', '07:00 - 07:30] + 106.8 min Auto Mundial'], ('BeIN Sports 2H', '')]
现在,您可以根据需要轻松处理列表中的这些元组。