Lesen der CSV-Datei ohne für

8

Ich muss eine CSV-Datei in Python lesen.

Da ich für die letzte Zeile einen Fehler 'NULL Byte' erhalte, möchte ich vermeiden, für Schlüsselwort aber while zu verwenden.

Weißt du wie das geht?

%Vor%

Ich möchte die for-Schleife durch eine while-Schleife ersetzen, so dass ich überprüfen kann, ob die Zeile NULL ist oder nicht.

Was ist die Funktion zum Lesen einer einzelnen Zeile im CSV-Modul? Danke

Danke

S. unter dem Traceback

%Vor%     
Abruzzo Forte e Gentile 11.02.2010, 10:06
quelle

8 Antworten

14

Vielleicht könnten Sie die vom CSV-Reader ausgegebene Ausnahme abfangen. Etwas wie das:

%Vor%

Oder Sie könnten next() :

verwenden %Vor%     
Pedro Ghilardi 11.02.2010, 11:22
quelle
3

Sie müssen (immer) GENAU sagen, was die Fehlermeldung ist, die Sie erhalten haben. Bitte bearbeiten Sie Ihre Frage.

Wahrscheinlich das:

%Vor%

Das csv-Modul ist nicht 8-Bit-sauber; siehe die Dokumente : "" "Außerdem gibt es derzeit einige Probleme bezüglich ASCII-NUL-Zeichen." ""

Die Fehlermeldung selbst ist fehlerhaft: Es sollte "NUL" sein, nicht "NULL": - (

Wenn die letzte Zeile in der Datei leer ist, erhalten Sie keine Ausnahme, Sie erhalten nur row == [] .

Wenn das Problem eine oder mehrere NULs in Ihrer (n) Datei (en) ist, müssen Sie (1) ernsthaft mit dem (den) Ersteller (n) Ihrer Datei (n) sprechen (2), falls dies nicht der Fall ist, lesen Sie die gesamte Datei in (mode="rb"), entfernen Sie die NUL (s), und geben Sie fixed_text.splitlines() an den CSV-Reader.

    
John Machin 11.02.2010 12:30
quelle
1

Die Django-Community hat sich mit Python-CSV-Importproblemen befasst, daher lohnt es sich, Suche nach CSV-Import dort, oder eine Frage posten. Sie können die fehlerhafte Zeile auch direkt in der CSV-Datei bearbeiten, bevor Sie den Import starten.

    
Dave Everitt 11.02.2010 10:38
quelle
1

Wenn Ihr Problem für die letzte leere Zeile spezifisch ist, können Sie numpy.genfromtxt (oder die alte matplotlib.mlab.csv2rec)

verwenden %Vor%     
dalloliogm 11.02.2010 11:55
quelle
1

Sie könnten versuchen, die Datei während des Lesens zu löschen:

%Vor%

Nehmen wir an, dass das einfache Ignorieren von NULL-Zeichen für Sie funktioniert!

    
John Fouhy 15.03.2010 20:58
quelle
0

nicht wirklich sicher, was du meinst, aber du kannst immer mit if

nach Existenz suchen %Vor%

Wenn dies nicht das ist, was Sie wollen, sollten Sie Ihr Problem genauer beschreiben, indem Sie Beispiele für Dinge zeigen, die für Sie nicht funktionieren, einschließlich Beispieldateiformat und gewünschte Ausgabe.

    
ghostdog74 11.02.2010 10:19
quelle
0

Ich habe keine Antwort, aber ich kann das Problem bestätigen und die meisten Antworten funktionieren nicht. Sie können diese Ausnahme nicht abfangen. Sie können nicht auf if line testen. Vielleicht könntest du direkt nach dem NULL-Byte suchen, aber ich bin nicht schnell genug, um das zu tun ... Wenn es immer in der letzten Zeile ist, könntest du das natürlich überspringen.

%Vor%     
telliott99 11.02.2010 12:32
quelle
0

Verarbeite die ursprüngliche csv -Datei und ersetze die Nul '%code%' mit leer, und dann kannst du sie lesen. Der eigentliche Code sieht so aus:

%Vor%

Es funktioniert für mich.

Und die ursprüngliche Antwort ist hier: csv - enthält Nullbyte

    
terry 16.01.2013 10:06
quelle

Tags und Links