Hallo zusammen,
ich habe eine Frage zum Einlesen von csv-Dateien. In meiner Datei sind die Zeilen unterschiedlich lang, die erte hat z.B. 6 Einträge, die zweite Zeile hat nur 3.
Wenn die Datei mit csv.reader(open("dateiname.csv","rb"),delimiter =";") eingelesen wird, erhalte ich eine Fehlermeldung:
SyntaxError: unexpected EOF while parsing
Was soll mir das sagen? Müssen alle Zeile der DAtei die gleiche Länge haben?
Gruß Jeremy
csv-Datei einlesen
Dieses Modul setzt das wohl vorraus.http://de.wikipedia.org/wiki/CSV_(Dateiformat) hat geschrieben: Jeder Datensatz sollte laut RFC 4180, Absatz 2, Punkt 4 die gleiche Anzahl Spalten enthalten – dies wird aber nicht immer eingehalten.
Dann musst du deinen Zeilen halt manuell mit split(";") aufteilen und auswerten.
Zuletzt geändert von ms4py am Mittwoch 11. Februar 2009, 12:09, insgesamt 1-mal geändert.
Moin,
bei mir funzt das aber:
foo.csv
Ergibt:
Muss also an was anderen liegen. Wie sieht denn deine Datei aus?
Gruß,
Manuel
bei mir funzt das aber:
foo.csv
Code: Alles auswählen
Foo;Bar;Blubb
Foo2;Bar2
Foo
Code: Alles auswählen
import csv
r = csv.reader(open("foo.csv", "rb"), delimiter=";")
for l in r:
print l
Code: Alles auswählen
['Foo', 'Bar', 'Blubb']
['Foo2', 'Bar2']
['Foo']
Gruß,
Manuel
Meine Datei sieht so aus:
LAMINA;160300;160100;0.351;59400;64600;64600
ISOTROPIC;210000;0.3;;;;
ISOTROPIC;210000;0.3;;;;
ISOTROPIC;210000;0.3;;;;
ISOTROPIC;210000;0.3;;;;
LAMINA;140000;140000;0.284;78000;105000;105000
LAMINA;140000;140000;0.284;78000;105000;105000
Also muss ich die leeren Zellen für die Zeilen 2 - 5 mit Nullen auffüllen und diese dann später wieder rausfiltern.
Oder gibt es eine andere Möglichkeit?
LAMINA;160300;160100;0.351;59400;64600;64600
ISOTROPIC;210000;0.3;;;;
ISOTROPIC;210000;0.3;;;;
ISOTROPIC;210000;0.3;;;;
ISOTROPIC;210000;0.3;;;;
LAMINA;140000;140000;0.284;78000;105000;105000
LAMINA;140000;140000;0.284;78000;105000;105000
Also muss ich die leeren Zellen für die Zeilen 2 - 5 mit Nullen auffüllen und diese dann später wieder rausfiltern.
Oder gibt es eine andere Möglichkeit?
An den Daten selbst kann es nicht liegen. Bei mir funktioniert es zumindest. Unter welchem System arbeitest du denn? Hast du schonmal das probiert, die Datei normal, also nicht im binären Modus zu öffnen?
Ja, einen Parser für die Datei selber schreiben.
Weiß ja nicht, was du alles an Funktionen benötigst, aber die Möglichkeiten von csv.reader sind ja nicht wirklich komplex.
Das ist ja schon mal die wichtigste Funktionalität.
Weiß ja nicht, ob du überhaupt mehr benötigst...
Weiß ja nicht, was du alles an Funktionen benötigst, aber die Möglichkeiten von csv.reader sind ja nicht wirklich komplex.
Code: Alles auswählen
f = open("datei.csv", "r")
for line in f:
row = line.split(";")
print row
Weiß ja nicht, ob du überhaupt mehr benötigst...
Ich nutze Python als Skriptsprache für die FEM-Software Abaqus unter Windows XP. Die Daten die ich einlesen möchte, beschreiben das Material für mein FE-Modell.
Wenn ich die Datei nicht im binären Modus öffne, kommt die gleiche Fehlermeldung.
Ich schreibe mir jetzt eine Funktion, mit der ich die Nullen dann aus der Liste trenne.
an helduel: Wie hat das bei dir funktioniert?
Wenn ich die Datei nicht im binären Modus öffne, kommt die gleiche Fehlermeldung.
Ich schreibe mir jetzt eine Funktion, mit der ich die Nullen dann aus der Liste trenne.
an helduel: Wie hat das bei dir funktioniert?
Das mit den Nullen einfügen ist definitiv Quatsch. Ich habe schon dutzende csv-Dateien über das Modul eingelesen, bei denen einige Felder in der oben beschriebenen Weise leer waren.
Ich tippe ebenfalls darauf, daß der Fehler von einer anderen Stelle herrührt. Vor allem weil er sich sonst wohl eher über ein EOL (=End of Line) oder eine ungenügende Spaltenzahl beschweren würde, als über ein Ende der Datei (EOF).
Ich tippe ebenfalls darauf, daß der Fehler von einer anderen Stelle herrührt. Vor allem weil er sich sonst wohl eher über ein EOL (=End of Line) oder eine ungenügende Spaltenzahl beschweren würde, als über ein Ende der Datei (EOF).
Das vermute ich auch. Ich habe mal mit Steuerzeichen in der Datei rumgespielt. So eine Fehlermeldung kam nie.
@Jeremy: Poste doch mal den Context des Codes.
Meine Ausgabe mit dem Python Code von oben war übrigens:
Gruß,
Manuel
edit: falsche Python-Ausgabe gepostet :-/
@Jeremy: Poste doch mal den Context des Codes.
Meine Ausgabe mit dem Python Code von oben war übrigens:
Code: Alles auswählen
['LAMINA', '160300', '160100', '0.351', '59400', '64600', '64600']
['ISOTROPIC', '210000', '0.3', '', '', '', '']
['ISOTROPIC', '210000', '0.3', '', '', '', '']
['ISOTROPIC', '210000', '0.3', '', '', '', '']
['ISOTROPIC', '210000', '0.3', '', '', '', '']
['LAMINA', '140000', '140000', '0.284', '78000', '105000', '105000']
['LAMINA', '140000', '140000', '0.284', '78000', '105000', '105000 ']
Manuel
edit: falsche Python-Ausgabe gepostet :-/
Wenn ich die Datei über die Python Shell öffne, erhalten ich keine Fehlermeldung und die Ausgabe ist identisch mit der von helduel. Da liegt der Fehler also nicht.
Ich nehme an, dass das irgendwas mit Abaqus zutun hat, so eine Problematik hatte ich schon mal in einem anderen Fall. Da habe ich in der Python-Shell getestet und beim Einlesen als Abaqus-Skript hat es nicht funktioniert.
Vielen Dank für eure Hilfe.
Ich nehme an, dass das irgendwas mit Abaqus zutun hat, so eine Problematik hatte ich schon mal in einem anderen Fall. Da habe ich in der Python-Shell getestet und beim Einlesen als Abaqus-Skript hat es nicht funktioniert.
Vielen Dank für eure Hilfe.