ValueError:没有足够的值可解包(预期11,得到1)

Mr.*_*arp 6 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'],
             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']
Run Code Online (Sandbox Code Playgroud)

Mar*_*cny 6

对于行

line.split()
Run Code Online (Sandbox Code Playgroud)

你在做什么?看起来像CSV,所以请尝试

line.split(',')
Run Code Online (Sandbox Code Playgroud)

例:

"one,two,three".split()  # returns one element ["one,two,three"]
"one,two,three".split(',')  # returns three elements ["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)

正如@ TigerhawkT3所提到的,最好使用CSV模块。这里提供极为简便的方法。

  • 奇怪的是,OP导入了`csv`模块,但从未使用过它(甚至掩盖了函数中的导入)。我更倾向于使用适当的`csv.reader`而不是使用不同的`str.split()`。 (2认同)

xbo*_*nez 5

错误消息是很不言自明的

(a,b,c,d,e) = line.split()
Run Code Online (Sandbox Code Playgroud)

期望line.split()产生5个元素,但在您的情况下,它仅产生1个元素。这可能是因为数据的格式不符合您的预期,流氓格式错误的行,或者可能是空行-无法知道。

要查看导致问题的行,您可以添加一些调试语句,如下所示:

if len(line.split()) != 11:
    print line
Run Code Online (Sandbox Code Playgroud)

正如Martin所建议的,您可能还会在错误的定界符上产生分歧。