Python - Pipes und Objektorientierung



  • Also der Titel ist ja schonmal wenig aussagekräftig, leider weiß ich nicht was ich sonst hätte schreiben sollen.

    Es geht um folgendes:

    CSV-Dateien sollen bearbeitet werden. Es sollen zB Spalten ausgewählt werden, Zeilen, wenn sie einer bestimmten Bedingung genügen und es sollen statistische Angaben über Spalten gemacht werden.

    Bislang gibt es für alles ein Skript.

    zB select_columns -c A,B liest die Standareingabe, wählt Spalten A und B aus und schreibt wieder eine CSV Datei in die Standardausgabe.

    Da bringt einige Vorteile mit sich, zB

    select_columns ... | select_rows

    kann durch die Pipe schneller behandelt werden.

    Andererseits sind die Skripten teils schwierig handzuhaben , ausserdem sind alle Ausgaben schwer wiederzuverwenden.

    Ich wollte nun eine Art API für CSV-Dateien schreiben, welche einfach handzuhaben ist, aber nicht wesentlich speicherintensiver oder langsamer.

    Ich habe eine Klasse CSV mit Methoden wie select_columns(cols)
    Jeder AUfruf schreibt eine temporäre Datei auf die Festplatte und liefert eine neue CSV-Instanz zurück, so dass solche Aufrufe möglich sind:

    csv.select_columns(cols).select_rows(condition).dump("neueDatei.csv")

    Leider verliere ich dadurch eine Menge Geschwindigkeit, die ständigen Festplattenzugriffe sind langsam, ausserdem ist keine Pipe mehr da, so dass
    Select_rows in diesem Beispiel erst warten mus, bist select_columns fertig ist, anstatt schon bearbeitete Zeilen zu nutzen.

    EIn anderes aber eher unwichtiges Problem ist, dass ich für jede Aktion eine temporäre Datei auf der festplatte anlege und damit auch viel Festplattenspeicher verbrauche. (Sollte eig keine Probleme machen, bei heutigen Festplattengrößen, ist aber unschön)

    Nunja, die Sprache in der ich das schreibe ist Python, und ich suche Möglichkeiten, meine Syntax beizubehalten und dennoch so eine Art Pipe verwenden zu können, um ganz einfach nicht viel langsamer zu sein als die Skripten.

    Für Ideen/Lösungen wäre ich sehr dankbar



  • Zuerst einmal gibts für Python schon einige CSV-Klassen. Ich hoffe also, dass du eine von diesen schon benutzt, um nicht alles von Hand machen zu müssen.

    Ich weiß leider nicht, warum du nach jedem Funktionsaufruf eine neue Datei schreibst. Operiere doch einfach auf deinem CSV-Objekt 😕


Anmelden zum Antworten