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 № 1Vous 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