Ich versuche, eine CSV-Datei mit Pythons csv
-Modul (speziell die DictReader
-Klasse) zu analysieren. Gibt es eine pythonische Methode, um leere oder fehlende Felder zu erkennen und einen Fehler zu erzeugen?
Hier ist eine Beispieldatei, die folgende Header verwendet: NAME, LABEL, VALUE
%Vor%Beim Parsen möchte ich, dass die zweite Zeile einen Fehler verursacht, da das Feld VALUE fehlt.
Hier ist ein Code-Snippet, das zeigt, wie ich mich dem annähere (ignoriere die hartcodierten Strings ... sie sind nur der Kürze wegen vorhanden):
%Vor% Gibt es eine sauberere Möglichkeit, nach Feldern in der CSV-Datei zu suchen, ohne eine Menge if
-Anweisungen zu haben? Wenn ich weitere Felder hinzufügen muss, brauche ich auch mehr Bedingungen, die ich wenn möglich vermeiden möchte.
Da None
und leere Zeichenfolgen beide als False
ausgewertet werden, sollten Sie Folgendes berücksichtigen:
Beachten Sie, dass Sie im Gegensatz zu einigen anderen Antworten immer noch die Möglichkeit haben, einen informativen, headerspezifischen Fehler anzuzeigen.
Dieser Code liefert für jede Zeile eine Liste von Feldnamen, die für diese Zeile nicht vorhanden (oder leer sind). Sie könnten dann eine ausführlichere Ausnahme angeben, z. B. "Fehlende Felder: foo, baz".
%Vor%Wenn Sie matplotlib.mlab.csv2rec verwenden, speichert es bereits den Inhalt der Datei in einem Array und löst einen Fehler aus, wenn einer der Werte fehlt.
%Vor%Das Problem besteht darin, dass es keine einfache Möglichkeit gibt, dieses Verhalten anzupassen oder im Falle fehlender Zeilen einen Standardwert anzugeben. Außerdem ist die Fehlermeldung nicht sehr erklärend (könnte nützlich sein, um hier einen Fehlerbericht zu posten).
ps. Da csv2rec den Inhalt der Datei in einen numply-Datensatz speichert, ist es einfacher, die Werte gleich None zu erhalten.
Tags und Links python error-handling csv