Wie kann ich fehlende Felder in einer CSV-Datei auf pythonische Weise erkennen?

8

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.

    
bedwyr 14.08.2009, 16:10
quelle

5 Antworten

14
%Vor%

Bearbeiten : Noch besser:

%Vor%     
balpha 14.08.2009, 16:17
quelle
2

Da None und leere Zeichenfolgen beide als False ausgewertet werden, sollten Sie Folgendes berücksichtigen:

%Vor%

Beachten Sie, dass Sie im Gegensatz zu einigen anderen Antworten immer noch die Möglichkeit haben, einen informativen, headerspezifischen Fehler anzuzeigen.

    
Triptych 14.08.2009 16:18
quelle
1

So etwas?

%Vor%

Sie können möglicherweise "Wenn nicht Wert:" als Test anstelle des expliziteren Tests verwenden, den Sie angegeben haben.

    
retracile 14.08.2009 16:15
quelle
1

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%     
John Millikin 14.08.2009 16:39
quelle
0

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.

    
dalloliogm 14.08.2009 16:39
quelle

Tags und Links