Ich versuche, zwei Sätze von CSV-Dateien zu laden und einige Berechnungen anzustellen, z set1 - set2
exc.
Ich versuche beide Sets so zu laden:
import glob
for a, b in (glob.glob("*a.csv"), glob.glob("*b.csv")):
Und ich bekomme den Fehler:
ValueError: too many values to unpack
Antworten:
6 für die Antwort № 1Du bekommst das ValueError
weil Sie versuchen, mehr Elemente zuzuweisendas Tupel als die Anzahl der Zielvariablen, die Sie angeben. Die for-Loop-Auspacksyntax durchläuft jede Liste in Ihrem Tupel und versucht, jeden Wert im Tupel Ihren Zielen zuzuordnena
und b
). Das würde zum Beispiel funktionieren:
for a,b in (["0a.csv", "1a.csv"], ["0b.csv", "1b.csv"]):
print a,b
Es weist den ersten Wert jeder Liste zu a
und der zweite Wert zu b
. Der Code oben druckt:
0a,csv 1a.csv
0b.csv 1b.csv
So bekommen Sie die ValueError
denn das ergibt sich aus mindestens einem Ihrer glob.glob
Anrufe ist eine Liste, die länger als zwei Elemente ist.
Eine Lösung
Basierend auf dem, was Sie zu tun versuchen, möchte ich Sie verwenden zip
.
import glob
for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
# whatever
Dazu werden Paare von Dateien benötigt, die dem von Ihnen angegebenen Muster entsprechen, und weisen sie zu a
und b
. Zum Beispiel, wenn Sie Dateien haben 0a.csv
, 1a.csv
, 2a.csv
, 0b.csv
, 1b.csv
, und 2b.csv
tun
for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
print a, b
Ergebnisse in
0a.csv 0b.csv
1a.csv 1b.csv
2a.csv 2b.csv