Multirow Ascii Tabelle erstellen

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.
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auf den schnellen Blick (ohne die Mechanismen zu verstehen):

- Zeile 6 ist obsolet, da ``reader`` (würde ich anders nennen!) bereits iterierbar ist und somit *direkt* an ``groupby`` übergeben werden kann. Insbesondere bei *großen* Daten wird Dein Code damit deutlich schneller.

- Wieso nutzt Du beim schreibenden Zugriff auf eine Datei *nicht* ``with``? ;-)

- Noch effizienter wäre es, wenn Du ``data`` nicht als Liste, sondern Generator-Ausdruck umschreibst. Damit könntest Du Lesen, Verarbeiten und Schreiben effizient vereinen, weil immer nur *ein* Objekt gelesen, bearbeitet und sofort geschrieben wird.
Ich würde mir also drei Funktionen schreiben: Eine zum Lesen (erwartet einen Dateinamen), die einen Iterator von Zeilen zurückliefert (yield!). Eine zum Verarbeiten, die einen Iterator von Zeilen erwartet und einen Iterator von bearbeiteten Objekten zurückliefert. Und schlussendlich eine zum Schreiben, die als Eingabe einen Iterator von bearbeiteten Objekten erwartet und einen Dateinamen.
Diese kannst Du dann so kombinieren:

Code: Alles auswählen

dump(process_data(load("in.csv")), "out.csv")
Neben einer hübschen Gliederung ist Dein ``process_data`` damit unabhängig, *woher* die Daten stammen. Und auch it dem Ergebnis kannst Du andere oder zusätzliche Dinge anstellen, als nur das Schreiben. Dies erleichtert auch das Testen ungemein :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten