我正试图拆分这条线:
American plaice - 11,000 lbs @ 35 cents or trade for SNE stocks
单词or
,但收到ValueError: not enough values to unpack (expected 2, got 1)
。
这是没有意义的,如果我在or
分开句子,那么确实会留下2边,而不是1。
这是我的代码:
if ('-' in line) and ('lbs' in line):
fish, remainder = line.split('-')
if 'trade' in remainder:
weight, price = remainder.split('to ')
weight, price = remainder.split('or')
'to'
行是我通常使用的,并且它运行良好,但是这个新行没有'to'
而是'or'
,所以我尝试写一行解决任何一个条件,但无法弄明白所以我只是写了一秒钟,现在我遇到了上面列出的错误。
感谢任何帮助。
答案 0 :(得分:2)
最直接的方法可能是使用正则表达式来进行拆分。然后你可以分开任何一个单词,无论哪个出现。括号内的?:
使得组无法捕获,因此匹配的单词不会出现在输出中。
import re
# ...
weight, price = re.split(" (?:or|to) ", remainder, maxsplit=1)
答案 1 :(得分:1)
这可以通过检查分隔符是否首先在字符串中来解决您的问题。
另请注意,split(str, 1)
会确保您的列表最多可以拆分一次(Ex "hello all world".split(" ", 1) == ["hello", "all world"]
)
if ('-' in line) and ('lbs' in line):
fish, remainder = line.split('-')
if 'trade' in remainder:
weight, price = remainder.split(' to ', 1) if ' to ' in remainder else remainder.split(' or ', 1)
答案 2 :(得分:1)
在尝试拆分'to '
之前,您在'or'
上拆分,这会导致错误。 remainder.split('to ')
的返回值为[' 11,000 lbs @ 35 cents or trade for SNE stocks']
,无法解压缩为两个单独的值。你可以通过测试你需要首先拆分的单词来解决这个问题。
if ('-' in line) and ('lbs' in line):
fish, remainder = line.split('-')
if 'trade' in remainder:
if 'to ' in remainder:
weight, price = remainder.split('to ')
elif ' or ' in remainder:
weight, price = remainder.split(' or ') #add spaces so we don't match 'for'
答案 3 :(得分:0)
完成split()
后,您有一个列表,而不是字符串。所以你不能做另一个split()
。如果您只是复制该行,那么您将覆盖其他结果。您可以尝试以字符串形式进行处理:
weight, price = remainder.replace('or ', 'to ').split('to ')
答案 4 :(得分:0)
问题在于"对于"还包含"或"因此,你最终会得到以下结论:
a = 'American plaice - 11,000 lbs @ 35 cents or trade for SNE stocks'
a.split('or')
给出
['American plaice - 11,000 lbs @ 35 cents ', ' trade f', ' SNE stocks']
Stephen Rauch的回答确实解决了这个问题