/ / Python ValueError: trop de valeurs à décompresser avec glob - python, python-2.7

Python ValueError: trop de valeurs à décompresser avec glob - python, python-2.7

J'essaie de charger deux ensembles de fichiers CSV et de faire des calculs sur les deux, tels que la différence de chaque ensemble, erreur absolue moyenne set1 - set2 exc.

J'essaie de charger les deux ensembles comme ceci:

import glob
for a, b in (glob.glob("*a.csv"), glob.glob("*b.csv")):

Et j'obtiens l'erreur:

ValueError: too many values to unpack

Réponses:

6 pour la réponse № 1

Vous obtenez le ValueError parce que vous essayez d'affecter plus d'éléments àle tuple que le nombre de variables cibles que vous fournissez. La syntaxe de décompression du tuple de boucle for parcourt chaque liste de votre tuple et tente d'affecter chaque valeur du tuple à vos cibles (a et b). Par exemple, cela fonctionnerait:

for a,b in (["0a.csv", "1a.csv"], ["0b.csv", "1b.csv"]):
print a,b

Il attribue la première valeur de chaque liste à a et la deuxième valeur à b. Le code ci-dessus affiche:

0a,csv 1a.csv
0b.csv 1b.csv

Ainsi, vous obtenez le ValueError parce que les résultats d'au moins un de vos glob.glob Appels est une liste plus longue que deux éléments.

Une solution

En fonction de ce que vous essayez de faire, je pense que vous voulez utiliser zip.

import glob

for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
# whatever

Cela prendra des paires de fichiers correspondant au modèle que vous avez donné et les assignera à a et b. Par exemple, si vous avez des fichiers 0a.csv, 1a.csv, 2a.csv, 0b.csv, 1b.csv, et 2b.csv Faire

for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
print a, b

résulte en

0a.csv 0b.csv
1a.csv 1b.csv
2a.csv 2b.csv