Ich versuche, eine CSV-Datei mit Pythons csv
Modul zu analysieren (speziell die DictReader
Klasse). Gibt es einen pythonischen Weg, um leere oder fehlende Felder zu erkennen und einen Fehler zu erzeugen?Wie erkenne ich fehlende Felder in einer CSV-Datei auf pythonische Weise?
Hier ist eine Beispieldatei mit den folgenden Überschriften: NAME, LABEL, VALUE
foo,bar,baz
yes,no
x,y,z
Beim Parsen, würde ich die zweite Zeile wie einen Fehler zu werfen, da es mit dem VALUE-Feld fehlt.
Hier ist ein Code-Schnipsel, die zeigt, wie ich näher dies (die hartcodierte Strings außer Acht lassen ... sie sind der Kürze halber nur vorhanden):
import csv
HEADERS = ["name", "label", "value" ]
fileH = open('configFile')
reader = csv.DictReader(fileH, HEADERS)
for row in reader:
if row["name"] is None or row["name"] == "":
# raise Error
if row["label"] is None or row["label"] == "":
# raise Error
...
fileH.close()
Gibt es eine saubere Art und Weise für die Überprüfung von Felder in der CSV-Datei w/out mit einer Reihe von if
Aussagen? Wenn ich weitere Felder hinzufügen muss, brauche ich auch mehr Konditionalitätsregeln, die ich möglichst vermeiden möchte.
Süße Pythonic Weg! –
Diese Methode ist mit dem Verhalten von csv.DictReader ziemlich inkompatibel. Es durchläuft alle Schlüssel in der Zeile, auch wenn einige davon vom DictReader verworfen werden, da sie in HEADERS nicht explizit erwähnt wurden. Mehr hier: http://docs.python.org/library/csv.html#csv.DictReader – Triptych
@Triptych: Es gibt höchstens einen solchen zusätzlichen Schlüssel (der Wert, der als Restkey an den Konstruktor übergeben wird). Ich sehe das Problem damit nicht. – balpha