Python ValueError:没有足够的值来解包(预期值为11,实际值为1)

Python ValueError:没有足够的值来解包(预期值为11,实际值为1),python,csv,Python,Csv,我为系统自动化写了一个脚本,但是我得到了标题中描述的错误。我下面的代码是脚本的相关部分。有什么问题 import csv import os DIR = "C:/Users/Administrator/Desktop/key_list.csv" def Customer_List(csv): customer = open(DIR) for line in customer: row = [] (row['MEM_ID'

我为系统自动化写了一个脚本,但是我得到了标题中描述的错误。我下面的代码是脚本的相关部分。有什么问题

import csv
import os

DIR = "C:/Users/Administrator/Desktop/key_list.csv"

def Customer_List(csv):
    customer = open(DIR)
        for line in customer:
            row = []
            (row['MEM_ID'],
             row['MEM_SQ'],
             row['X_AUTH_USER'],
             row['X_AUTH_KEY'],
             row['X_STORAGE_URL'],
             row['ACCESSKEY'],
             row['ACCESSKEYID'],
             row['ACCESSKEY1'],
             row['ACCESSKEYID1'],
             row['ACCESSKEY2'],
             row['ACCESSKEYID2'])=line.split()
            if csv == row['MEM_ID']:
                customer.close()
                return(row)
            else:
                print ("Not search for ID")
                return([])

id_input = input("Please input the Customer ID(Email): ")
result = Customer_List(id_input)

if result:
    print ("iD:    " + id['MEM_ID']

这个错误消息是不言自明的

(a,b,c,d,e) = line.split()
期望
line.split()
产生5个元素,但在您的情况下,它只产生1个元素。这可能是因为数据的格式不是您所期望的格式,可能是一个错误的行,也可能是一个空行—无法知道

要查看是哪一行导致了问题,可以添加如下调试语句:

if len(line.split()) != 11:
    print line
正如Martin所建议的,您也可能使用了错误的分隔符进行拆分。

用于行

line.split()
你在说什么?看起来像CSV,所以试试看

line.split(',')
例如:

"one,two,three".split()  # returns one element ["one,two,three"]
"one,two,three".split(',')  # returns three elements ["one", "two", "three"]

正如@TigerhawkT3提到的,最好使用CSV模块。非常快速和简单的方法可用。

看起来您的数据有问题,它不是您期望的格式。可能是一个新行字符或数据中的一个空格在修改代码。

99%的几率:某个地方有一个空行。@TigerhawkT3最初OP粘贴了他的代码。因为他是新来的,所以他把它适当地缩进,弄得一团糟。因此,我认为他可以通过一张不凌乱的图片。奇怪的是,OP导入了
csv
模块,但从未使用过它(甚至在函数中屏蔽了导入)。我更倾向于使用合适的
csv.reader
,而不是使用不同的
str.split()
@TigerhawkT3。链接到documentation.@Mr.Sharp我认为您的CSV中只有10个字段,因此您的错误现在必须是
(预期为11,得到10)
。确保从
=
的右侧到左侧分配等量的字段。