ValueError:需要多于1个值来解压缩,分割一行

时间:2013-11-28 16:29:43

标签: python

我在同一行有一个问题和答案的文件,我想将它们分开并将它们附加到他们自己的空列表中,但不断收到此错误:
builtins.ValueError: need more than 1 value to unpack

questions_list = []
answers_list = []

questions_file=open('qanda.txt','r')


for line in questions_file:
    line=line.strip()

    questions,answers =line.split(':')

    questions_list.append(questions)
    answers_list.append(answers)

4 个答案:

答案 0 :(得分:3)

line.split(':')显然会返回一个包含一个元素的列表,而不是两个元素。

因此,这就是为什么它无法将结果解压缩到questionsanswers。例如:

>>> line = 'this-line-does-not-contain-a-colon'
>>> question, answers = line.split(':')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

答案 1 :(得分:3)

这可能是因为当你进行拆分时,没有:,所以函数只返回一个参数,而不是2.这可能是由最后一行引起的,这意味着你是最后一行只有空格。像这样:

>>> a = '   '
>>> a = a.strip()
>>> a
''
>>> a.split(':')
['']

如您所见,.split返回的列表只是一个空字符串。所以,只是为了向您展示一个演示,这是一个示例文件:

enter image description here

我们尝试使用以下脚本(val.txt是上述文件的名称):

with open('val.txt', 'r') as v:
    for line in v:
        a, b = line.split(':')
        print a, b

这给了我们:

Traceback (most recent call last):
a  b

c  d
  File "C:/Nafiul Stuff/Python/testingZone/28_11_13/val.py", line 3, in <module>

    a, b = line.split(':')
e  f
ValueError: need more than 1 value to unpack

尝试通过调试器查看时,变量line变为\n,您无法将其拆分。

然而,一个简单的逻辑修正,将纠正这个问题:

with open('val.txt', 'r') as v:
    for line in v:
        if ':' in line:
            a, b = line.strip().split(':')
            print a, b

答案 2 :(得分:2)

尝试:

question, answers = line.split(':', maxsplit=1)
question, __, answers = line.partition(':')

同样在Python 3中,您可以执行其他操作:

question, *many_answers = line.split(':')

看起来像:

temp = line.split(':')
question = temp[0]
many_answers = tuple(temp[1:])

答案 3 :(得分:0)

发生这种情况的原因可能有几个,如其他答案所述。空行,或者一行仅有一个问题,没有冒号。如果即使行没有冒号也要对其进行解析(例如,如果某些行仅包含问题),则可以将拆分更改为以下内容:

TouchEvent

这样,questions, answers, garbage = (line+'::').split(':', maxsplit=2) questions的值将被填充(如果存在),而在原始文件中没有则为空。出于所有意图和目的,请忽略变量answers