Lesen und Schreiben von Klassen in CSV

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 6857
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

__deets__ hat geschrieben: Freitag 19. November 2021, 13:46 Wenn man will, kann man ja aber auch https://docs.python.org/3/library/dataclasses.html benutzen. Das ist vielleicht nicht ganz so umfangreich, aber vieles kann es eben auch schon.
Ich finde sogar, dass sich dataclasses besser in die Sprache einfügt als dieses attrs-Modul. Da brauche ich nur den @dataclass-Dekorator an die Klasse kleben und habe direkt die benötigte Magie.

Und mit SQLAlchemy geht es wohl so: https://docs.sqlalchemy.org/en/14/orm/m ... tive-table
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Für attrs geht das wohl so: https://docs.sqlalchemy.org/en/14/orm/m ... tive-table - aber das backend ist doch immer noch nicht CSV, was bringt das einem?
Benutzeravatar
snafu
User
Beiträge: 6857
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Und hier hat jemand ein Modul gebastelt, das dataclasses mit CSV-Daten befüllen kann: https://pypi.org/project/dataclass-csv/
zegru
User
Beiträge: 60
Registriert: Freitag 9. Oktober 2020, 09:22

__deets__ hat geschrieben: Sonntag 21. November 2021, 12:32 Das ist aber auch alles ganz schön viel Maschinerie. Über wieviele Klasse reden wir denn hier? Denn man kann das bei einigen wenigen ja auch einfach erstmal “zu Fuß” programmieren. Die ganze Meta-Magie ist fein, aber auch oft etwas undurchdringbar.
Eben. Ich dachte, das wäre eventuell ganz einfach, sowas wie "importier einfach dieses Modul hier". Es scheint sich aber, wenn es mal funktionieren sollte, um einen ziemlichen Aufriss zu handeln. Es handelt sich auch bei mir um eine einzige Klasse, deshalb ist es das einfachste, wenn ich das mit weniger Library-Unterstützung mache, sonst schieße ich mit Kanonen auf Spatzen und fahre 10x soviel Boilerplate Code ein, um etwas zu sparen. Sparen um jeden Preis!
Aber als Sekundäreffekt gab es viele wertvolle Einsichten in Python. Danke!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na für eine Klasse ginge das Modul von snafu, dataclasses_csv.
Benutzeravatar
snafu
User
Beiträge: 6857
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@zegru
Also eine Bibliothek empfiehlt sich dafür schon, damit man eben nicht alles zu Fuß machen muss. Dein Problem ist eher, dass du noch keinen einfachen Ansatz für dein Vorhaben gefunden hast. Wie gesagt, schau dir mal das dataclass-csv Modul näher an.

Hier etwas Beispiel-Code aus der Doku:

Code: Alles auswählen

@dataclass
class User:
    firstname: str
    email: str
    age: int

with open(filename) as users_csv:
    reader = DataclassReader(users_csv, User)
    for row in reader:
        print(row)
Also eigentlich relativ simpel und die Typ-Umwandlungen gibt's gratis dazu. Oder entspricht das nicht dem, was du dir vorgestellt hast?
zegru
User
Beiträge: 60
Registriert: Freitag 9. Oktober 2020, 09:22

Leider kann ich ja dataclass nicht verwenden, da ich ja auch SQLAlchemy für meine Klasse hernehme. Ich verwende jetzt halt das Modul csv und habe eine zusätzliche Methode in der Klasse Test geschrieben, die mir die einzelnen Felder als Tupel zurück liefert. Ich iteriere dann über eine Liste von Test Objekten und rufe dort mit csv.writerow() das Ergebnis des Tupellieferanten des Objekts zurück. Lediglich Felder->Tupel mache ich also manuell.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ahhhh. Das ist mir entgangen, dass es auch um SA Objekte geht. Aber dafür hat Snafu doch eine Integration von, \ SA & dataclasses gezeigt. Ob das dann in der Summe immer noch mit dataclasses_csv arbeitet, musst du ausprobieren.
Benutzeravatar
snafu
User
Beiträge: 6857
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Okay, wenn die dataclass wirklich nur Mittel zum Zweck ist und eigentlich nicht benötigt wird, dann würde ich den Gedanken wieder verwerfen. Ein Modul für die Umwandlung von SQLAlchemy-Klassen in CSV kenne ich nicht und habe auf die Schnelle auch nichts dazu gefunden. Da bleibt dir wohl nur der händische Weg, den du ja offenbar auch schon gehst.
Antworten