Datenextraktion aus einer .csv - Datei

  • Moin,

    ich möchte aus einer .csv Datei einige Daten löschen und für die Weiterverarbeitung vorbereiten.

    Aus der ganz urspünglichen Datei habe ich mit dem nachstehenden Programm (erstellt mit Hilfe des Forums) schon einen guten Zwischenschritt erstellt:

    Den Output möchte ich mit Python weiter verarbeiten und ich brauche nur Datum, Zeit, "Wert 1/2) und den "value".

    Die Ausgangsdaten haben bis "value=" immer die gleiche feste Struktur. "TS=...." kann gelöscht werden. Wie kann ich die nicht benötigten Zeichen und Blöcke löschen.

    Hans-Jürgen

  • Go to Best Answer
  • Den Output in ein File zu schreiben schaffst du hoffentlich selber. Die Monatsnamen kannst du mit einem Dictionary mappen.

  • Post by Hajulied (February 12, 2024 at 10:02 PM).

    This post was deleted by the author themselves (February 12, 2024 at 10:04 PM).
  • Post by simonz (February 12, 2024 at 10:31 PM).

    This post was deleted by the author themselves: War wohl Quatsch. (February 12, 2024 at 10:33 PM).
  • Python hat ein Modul für CSV-Dateien: https://docs.python.org/3/library/csv.html Damit kann ma u.a. die Datei in ein Dict einlesen und damit arbeiten und ggf. in eine CSV schreiben.

    Danke, aber der Link führt mich nicht recht weiter. Dort werden viele Dinge beschrieben, die weit über meine Anforderung hinaus geht und für die Lösung meiner Aufgabe unnötig sind.

    Ich muss mich mehr mit der Bearbeitung einer Dateizeile beschäftigen.

    Mit dem Script aus meinem ersten Post und dem Lösungsvorschlag von Tell bin ich schon ganz gut versorgt.

    (Den Exkurs mit csv oder nicht csv habe ich nicht verstanden?()

  • Hajulied Die Datei hat eine ``*.csv``-Endung aber ganz offensichtlich ist das gar keine CSV-Datei. So etwas sollte man nicht machen weil das verwirrend ist wenn aussen auf der “Verpackung“ etwas drauf steht, was dann aber gar nicht enthalten ist.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • mmmhhh- das habe ich schon verstanden. Aber es hat mit der eigentlichen Fragestellung nichts zu tun.

    Die ursprüngliche Datenquelle gibt es als csv aus, also besteht keine Notwendigkeit, daran etwas zu ändern. Alle Tabellenkalkulationsprogramme bieten Importfilter für alle möglichen "Trenner". Das "C" heißt zwar "Comma", aber es kann genausogut ein ":" oder ein " " oder irgendwas sein....

    Ich suche nur nach Tipps für die Bearbeitung der Dateizeilen. Dazu hat Tell ja schon einen guten Hinweis gegeben.

  • Hajulied Was ist denn die ursprüngliche Datenquelle und warum wird das Format dann geändert aber immer noch *.csv genannt? Ein Leerzeichen kann hier kein Trennzeichen sein. Denn *in* Werten sind ja auch Leerzeichen enthalten ohne das die ”escaped” wurden. Das ist kein CSV und sollte deswegen auch nicht so heissen. Der Betreff von diesem Thema ist damit auch extrem irreführend.

    Wäre es CSV dann würde man das `csv`-Modul verwenden und das nicht versuchen selbst nachzuprogrammieren. CSV ist nämlich doch ein kleines bischen komplexer als einfach nur an einem Zeichen aufteilen. Wenn das so einfach wäre, bräuchte man da kein extra Modul für.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Hajulied February 13, 2024 at 11:25 PM

    Selected a post as the best answer.
  • Den Output in ein File zu schreiben schaffst du hoffentlich selber. Die Monatsnamen kannst du mit einem Dictionary mappen.

    Moin,

    nochmals vielen Dank für Deinen konstruktiven Lösungsansatz.

    Hat sehr gut funktioniert, Ausgabe in Datei ebenso.

    Die Umwandlung der Monatsnamen muss ich noch üben.

    Und vor allem: das ganze läuft viel schneller als mein Excel-Makro.

  • Hajulied February 14, 2024 at 3:13 PM

    Selected a post as the best answer.
  • Hajulied Die Ausgangsdatei wird nicht nur für einige Monate die englische Schreibweise enthalten, sondern für alle. Denn zu zählst da ja komplett die Fälle auf, in denen sich das zwischen den beiden Sprachen unterscheidet.

    Statt ``ts=…`` wegzuwerfen würde ich eher das Datum am Anfang wegwerfen, denn die Information steckt ja auch in dem `ts`-Wert, und das ohne das man sich Gedanken über Monatsschreibweisen oder Zeitzonen oder ähnliches Gedanken machen muss.

    Diese vielen magischen Index- und Slicewerte machen den Code auch nicht wirklich leicht verständlich, und man merkt da auch nicht so leicht wenn das Format mal nicht dem entspricht was man erwartet. Das ist also sowohl beim schreiben des Quelltextes als auch im laufenden Betrieb fehleranfällig.

    Das folgende gibt die Monatskürzel in der Sprache aus, auf die das System eingestellt ist. Also wenn das Gebietsschema auf Deutsch eingestellt ist, dann beispielsweise „Mär“ für den März. Zwischen die einzelnen Daten wird ein | gesetzt, weil Leerzeichen als Trennzeichen ja nicht eindeutig sind. Und eigentlich sollte man auch gar keine natürliche Sprache für den Monat einstellen müssen sondern einfach ein sprachunabhängiges Standardformat für den Zeitstempel verwenden. Und auch tatsächlich eine CSV-Datei erstellen, damit das einfach weiterverarbeitet werden kann.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Danke, ich habe Tell's Vorschlag verstanden und werde ihn weiter verwenden. Ich kann ihn nach meinen Vorstellungen modifizieren und den "Erkenntnisgewinn" für eventuelle weitere kleine Projekte nutzen. Sein Beispiel mit den ersten Monaten des Jahres war sehr aussagekräftig und er hat ja auch richtigerweise darauf hingewiesen, dass es weitere Monate mit englischer Schreibweise gibt. "Dictionary" war mir bislang nicht so geläufig, aber jetzt kann ich die Monatskürzel nach Bedarf auch in Zahlenwerte umwandeln.

    Das 'csv'-Modul nutze ich für die Ausgabe.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!