我在同一行有一个问题和答案的文件,我想将它们分开并将它们附加到他们自己的空列表中,但不断收到此错误:
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)
答案 0 :(得分:3)
line.split(':')
显然会返回一个包含一个元素的列表,而不是两个元素。
因此,这就是为什么它无法将结果解压缩到questions
和answers
。例如:
>>> 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
返回的列表只是一个空字符串。所以,只是为了向您展示一个演示,这是一个示例文件:
我们尝试使用以下脚本(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
。