Seite 1 von 1

CSV Dateien 'Normieren'

Verfasst: Montag 23. Januar 2023, 13:17
von phonigs
Hallo zusammen,

Ich habe zwar schon mit CSV Dateien in Python gearbeitet, jedoch stehe ich gerade vor einem Problem bei dem ich Hilfe gebrauchen könnte.

Ich habe ein Verzeichnis mit mehreren CSV Dateien, welche Prinzipiell gleich Aufgebaut sind jedoch in verschiedenen 'Dialekten'

Aufbau 1;
Delimiter = ';'
enthält Leere Zeilen und arbeitet mit subsets. Headrow eines subsets endet mit ';' nach dem letzten Wert der Zeile, Datenzeilen enden mit einem \n
es sind nur so viele Columns wie nötig pro subset angelegt.

Aufbau 2:
Delimiter =';'
es sind immer 95 delimiter pro zeile eingefügt und je nach bedarf ausgefüllt oder NA. Kopfzeilen Formatierung ist nicht zu erkennen.

Frage 1: Ist es möglich die Dateien zu normieren oder auf gleiche weise einzulesen? Ich konnte dafür keinen Dialect herausfinden.


Jede Datei, egal ob vom Aufbau 1 oder 2 hat die Gleiche Struktur.

Subset[0] ist der Datei Kopf (Name, Artikel, Datum etc.)

Subset[1-3] sind erstmal irrelevante Informationen. Und subset[4-x] wären relevant. Jedoch nur die letzten 3. Wie am x zu erkennen sind die letzten Subsets unterschiedlich viele. das kann von 1 bis 25 gehen.

Ich würde gerne die subsets seperieren und mit diesen getrennt arbeiten. Ist das möglich ? mit pandas bzw. dem nativen csv modulen kam ich da bisher auf keinen grünen zweig.

Frage 2: Gibt es eine Methode dateien mit subsets Automatisiert zu unterteilen ?

Ich danke schonmal vielmals für eure Hilfe. Ich bin mir bewusst dass es sicherlich hilfreich wäre eine solche .csv zu veröffentlichen, jedoch ist das nicht ohne weiteres möglich.

Deshalb bin ich auch für jede Gegenfrage offen und dankbar um jegliche Hilfe.

VG Niklas

Re: CSV Dateien 'Normieren'

Verfasst: Montag 23. Januar 2023, 14:29
von Sirius3
Pandas arbeitet mit einem festen csv-Format, das csv-Modul kann man freier programmieren. Um konkret helfen zu können, wären Beispieldaten hilfreich, denn aus der Beschreibung wird mir nur so halb klar, wie die Dateien aufgebaut sind. Und natürlich die Frage, welchen Code hast Du ausprobiert und an welcher Stelle kommst Du konkret nicht weiter?

Re: CSV Dateien 'Normieren'

Verfasst: Montag 23. Januar 2023, 14:39
von __deets__
Wenn du die CSVs nicht zur Verfuegung stellen kannst, wird's eng. Wir brauchen nicht die "echten" Daten, sie koennen ja auch entsprechend veraendert werden. Aber nur mit wolkigen Beischreibungen wird's eng.

Re: CSV Dateien 'Normieren'

Verfasst: Dienstag 24. Januar 2023, 02:44
von snafu
phonigs hat geschrieben: Montag 23. Januar 2023, 13:17 Frage 1: Ist es möglich die Dateien zu normieren oder auf gleiche weise einzulesen? Ich konnte dafür keinen Dialect herausfinden.
Du kannst einen Dialect selber definieren, indem du eine eigene Klasse von der Dialect-Klasse ableitest. Hilfreich ist dabei auch der csv.Sniffer(), der einen bei der Definition eines Dialects unterstützt (würde mich da aber nicht zu 100% drauf verlassen).
phonigs hat geschrieben: Montag 23. Januar 2023, 13:17 Frage 2: Gibt es eine Methode dateien mit subsets Automatisiert zu unterteilen ?
Der csv.reader() arbeitet mit beliebigen Iteratoren und setzt nur voraus, dass deren __next__()-Methode einen String liefert. Es ist somit möglich, den Input vorab zu filtern und nur die relevanten Zeilen an den Reader durchzureichen. Grundsätzlich spricht auch nichts gegen die gleichzeitige Anwendung mehrerer Reader mit jeweils eigenen Dialekten, so lange man beachtet, dass der Stream "weiterlaufen" muss (also nicht beim anderen Reader wieder komplett neu anfängt).

Für die letzten Elemente aus einer beliebig großen Menge, kann man übrigens deque() aus dem collections-Modul benutzen. Da definiert man mittels maxlen, wie viele Elemente höchstens behalten werden. Alles was davor kommt, wirft er weg. Das ist hilfreich bei relativ großen Datenmengen, weil hierbei der Speicher nicht unnötig belastet wird (im Gegensatz zum Slicing über eine Liste der Datensätze).

Re: CSV Dateien 'Normieren'

Verfasst: Dienstag 24. Januar 2023, 03:28
von snafu
snafu hat geschrieben: Dienstag 24. Januar 2023, 02:44 Grundsätzlich spricht auch nichts gegen die gleichzeitige Anwendung mehrerer Reader mit jeweils eigenen Dialekten, so lange man beachtet, dass der Stream "weiterlaufen" muss (also nicht beim anderen Reader wieder komplett neu anfängt).
Wobei man da echt aufpassen muss, weil eine Zeile, die man vorher anguckt, um den passenden Reader zu bestimmen, ja quasi verbraucht ist. Ein Reader holt sich die Zeilen intern vom Stream. Wenn die Zeile aber schon "weg ist", dann kriegt der Reader das halt nicht mit. Ist ein bisschen tricky, aber lösbar (Stichwort: Pushback). Grundsätzlich versucht man aber natürlich, gar nicht erst in diese Situation zu kommen. Denn zu viele Hirn-Verschränkungen sind einfach nicht so gesund, sofern man noch halbwegs verstehen will, was der Code tut. ;)