Wie @ S.Lott sagt, sollten Sie Ihre Dateien im 'rb'-Modus und nicht im' rU'-Modus öffnen. Dies kann jedoch NICHT zu Ihrem aktuellen Problem führen. Soweit ich weiß, würde die Verwendung des 'rU'-Modus Sie durcheinander bringen, wenn \r
in die Daten eingebettet sind , aber keine anderen Dramen verursachen. Ich stelle auch fest, dass Sie mehrere Dateien haben (alle mit 'rU' geöffnet?), Aber nur eine, die ein Problem verursacht.
Wenn das CSV-Modul angibt, dass Ihre Datei ein "NULL" -Byte (dumme Nachricht, sollte "NUL" sein) enthält, müssen Sie überprüfen, was sich in Ihrer Datei befindet. Ich würde vorschlagen, dass Sie dies auch dann tun, wenn die Verwendung von 'rb' das Problem beseitigt.
repr()
ist (oder will) dein Debugging-Freund. Es wird auf plattformunabhängige Weise eindeutig zeigen, was Sie haben (was für Helfer hilfreich ist, die nicht wissen, was od
ist oder tut). Mach das:
print repr(open('my.csv', 'rb').read(200)) # dump 1st 200 bytes of file
und kopieren Sie das Ergebnis sorgfältig in eine Bearbeitung Ihrer Frage (nicht in einen Kommentar).
Beachten Sie auch, dass, wenn die Datei wirklich zwielichtig ist, z. B. no \ r oder \ n, in angemessener Entfernung vom Dateianfang, die von gemeldete Zeilennummer reader.line_num
(nicht hilfreich) 1 \x00
lautet. 1. Finden Sie, wo sich die erste befindet (falls vorhanden), indem Sie dies tun
data = open('my.csv', 'rb').read()
print data.find('\x00')
und stellen Sie sicher, dass Sie mindestens so viele Bytes mit repr oder od sichern.
Was data.count('\x00')
sagt dir das? Wenn es viele gibt, möchten Sie vielleicht so etwas tun
for i, c in enumerate(data):
if c == '\x00':
print i, repr(data[i-30:i]) + ' *NUL* ' + repr(data[i+1:i+31])
damit Sie die NUL-Bytes im Kontext sehen können.
Wenn Sie \x00
in der Ausgabe (oder \0
in Ihrer od -c
Ausgabe) sehen können, haben Sie definitiv NUL-Bytes in der Datei, und Sie müssen Folgendes tun:
fi = open('my.csv', 'rb')
data = fi.read()
fi.close()
fo = open('mynew.csv', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()
Haben Sie sich die Datei (einschließlich der letzten Zeilen) übrigens mit einem Texteditor angesehen? Sieht es tatsächlich aus wie eine vernünftige CSV-Datei wie die anderen (keine "NULL-Byte" -Ausnahme) Dateien?
od -c
die erste Zeile aus?