web-dev-qa-db-fra.com

ValueError: pas assez de valeurs pour décompresser (attendu 11, 1)

J'ai écrit un script pour l'automatisation du système, mais je reçois l'erreur décrite dans le titre. Mon code ci-dessous est la partie pertinente du script. Quel est le problème?

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']
3
Mr.Sharp

Pour la ligne

line.split()

Sur quoi divisez-vous? Ressemble à un CSV, alors essayez

line.split(',')

Exemple:

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

EDIT: Comme @ TigerhawkT3 le mentionne, il serait préférable d’utiliser le module CSV. Méthode incroyablement rapide et facile disponible ici .

4
Martin Konecny

Le message d'erreur est assez explicite

(a,b,c,d,e) = line.split()

s'attend à ce que line.split() fournisse 5 éléments, mais dans votre cas, il ne donne qu'un élément. Cela peut être dû au fait que les données ne sont pas dans le format que vous attendez, une ligne malformée non autorisée ou peut-être une ligne vide - il est impossible de savoir.

Pour voir quelle ligne est à l'origine du problème, vous pouvez ajouter des instructions de débogage comme ceci:

if len(line.split()) != 11:
    print line

Comme le suggère Martin, vous pourriez également vous séparer du mauvais délimiteur.

2
xbonez

semble que quelque chose ne va pas avec vos données, ce n’est pas dans le format que vous attendez. Il peut s'agir d'un caractère de nouvelle ligne ou d'un espace vide dans les données qui bricole votre code.

0
Rohith Yeravothula