Seite 1 von 1
_csv.Error: field larger than field limit (131072)
Verfasst: Freitag 12. Februar 2016, 16:07
von Nobuddy
Hallo zusammen,
habe seit heute das Problem, dass hier:
Code: Alles auswählen
txt_file = list()
with codecs.open(self.finish_path, 'r', 'utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter="\t", quotechar='^')
for i, row in enumerate(reader):
if not header and i == self.table_header:
continue
line = list()
for cell in row:
line.append(re.sub("\r\n", "\n", cell).strip())
txt_file.append(line)
ich folgende Fehlermeldung erhalte:
_csv.Error: field larger than field limit (131072)
Könnt Ihr mir sagen, was diese Fehlermeldung genau zu bedeuten hat und wie ich dieses Problem lösen kann?
Grüße Nobuddy
Re: _csv.Error: field larger than field limit (131072)
Verfasst: Freitag 12. Februar 2016, 16:45
von Sirius3
@Nobuddy: das Fieldlimit ist da, um zu verhindern, dass fehlende Anführungszeichen dazu führen, dass der komplette Dateiinhalt in eine Zelle geschrieben wird. Also entweder hast Du tatsächlich eine Zelle die Länger ist als 131072 Zeichen oder Deine Datei ist kaputt. Im ersten Fall kannst Du das Limit hochsetzen.
Re: _csv.Error: field larger than field limit (131072)
Verfasst: Freitag 12. Februar 2016, 18:32
von Nobuddy
Hallo Sirius3,
Danke für Deine Antwort!
Ich gehe mal davon aus, dass die Datei ok ist.
Wie kann ich das Linit hoch setzen?
Grüße Nobuddy
Re: _csv.Error: field larger than field limit (131072)
Verfasst: Freitag 12. Februar 2016, 18:47
von Nobuddy
Habe die Lösung dazu gefunden!
Jetzt kommt keine Fehlermeldung mehr!
Re: _csv.Error: field larger than field limit (131072)
Verfasst: Freitag 12. Februar 2016, 19:58
von Nobuddy
Habe mich doch zu früh gefreut!
Von der Datei, lassen sich 59575 Zeilen von 59739 Zeilen korrekt bearbeiten.
Die Restlichen dürften irgend einen Fehler haben, dass evtl. kein Zeilenende vorhanden ist oder dies irgendwie fehlerhaft ist.
Mit obiger Lösung ließen sich nur 36766 Zeilen verarbeiten.
Mit dieser Lösung, gehen zumindest 59575 Zeilen fehlerfrei.
Code: Alles auswählen
txt_file = list()
with codecs.open(self.finish_path, 'r', 'utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter="\t", quotechar='^')
try:
for i, row in enumerate(reader):
if not header and i == self.table_header:
continue
line = list()
for cell in row:
line.append(re.sub("\r\n", "\n", cell).strip())
txt_file.append(line)
except:
for i, row in enumerate(reader):
if not header and i == self.table_header:
continue
line = list()
for cell in row:
line.append(re.sub("\r\n", "\n", cell).strip())
txt_file.append(line)
Dass dieser Code kompletter Quatsch ist, sehe ich genauso.
Warum es dann doch bei dieser Datei funktioniert, kann ich mir nur so erklären, dass der fehlerbehaftete Bereich in einem Stück ist und durch das except abgefangen wird. 'except _csv.Error' hat nicht funktioniert, daher nur except.
Wenn es jetzt mehrere verschiedene fehlerhafte Bereiche in der Datei geben würde, würde Obiges auch nicht funktionieren.
Welche Möglichkeit würde es da geben, die fehlerhaften Bereiche aufzufinden und zu reparieren?
Grüße Nobuddy
Re: _csv.Error: field larger than field limit (131072)
Verfasst: Samstag 13. Februar 2016, 10:46
von Sirius3
@Nobuddy: die Exception ist Error und im Modul csv aus dem internen Modul _csv importiert, korrekt ist also csv.Error. Das reader Objekt hat ein Attribut line_num, in dem steht die Zeile, wo der Fehler aufgetreten ist.
Re: _csv.Error: field larger than field limit (131072)
Verfasst: Samstag 13. Februar 2016, 11:19
von Nobuddy
Sirius3 Danke, für Deine Info, das hilft mir weiter!
Hiermit:
Code: Alles auswählen
txt_file = list()
with codecs.open(self.finish_path, 'r', self.coding) as csvfile:
reader = csv.reader(csvfile, delimiter="\t", quotechar='^')
try:
for i, row in enumerate(reader):
if not header and i == self.table_header:
continue
line = list()
for cell in row:
line.append(re.sub("\r\n", "\n", cell).strip())
txt_file.append(line)
except csv.Error:
print(reader.line_num)
erhalte ich die Print-Ausgabe, Zeilen-Nummer 36949.
Der Fehler sollte dann bis Zeilen-Nummer 37113 gehen.
Mal schauen, ob ich diesen Zeilen-Bereich repariert bekomme.
Grüße Nobuddy