CSV-Bericht-Schreiber
Verwende dieses Skill, wenn ein Job eine Liste von Ergebniszeilen erzeugt und du ein ordentliches CSV für Tabellenkalkulationen sowie eine Markdown-Tabelle für einen PR-Kommentar oder Telegram-Digest benötigst – aus einer einzigen Spaltendefinition, sodass die beiden Ausgaben nie auseinanderdriften. Du deklarierst die Spalten (Schlüssel, Kopfzeile, optionaler Formatierer) einmal; der Helfer gibt beides aus, in stabiler Spaltenreihenfolge, mit korrektem CSV-Quoting und Pipe-Maskierung für Markdown. Kein Pandas.
Wann verwenden
- Der Benutzer sagt: „Schreibe die Ergebnisse in ein CSV“, „Exportiere einen Bericht“, „Erstelle eine Markdown-Tabelle davon“, „Speichere die Ausgabe des Laufs als Tabelle“.
- Der Code im Gespräch enthält eine
list[dict](oder eine Liste von Objekten), die derzeit ad hoc ausgegeben wird.
Wann NICHT verwenden
- Die Daten erfordern echte Dataframe-Arbeit – Joins, Group-bys, Pivots; greife stattdessen zu Pandas/Polars.
- Ein einzelner skalarer Wert, bei dem ein CSV / eine Tabelle übertrieben wäre.
Konkretes Beispiel
Benutzereingabe:
Ich habe eine Liste gescannter Token mit einem Score und Preis. Speichere ein CSV und gib mir auch eine Markdown-Tabelle für den Telegram-Digest.
Ausgabe:
# Kopiere assets/report.py in dein Projekt, dann:
from report import Column, write_csv, to_markdown
columns = [
Column("symbol", "Symbol"),
Column("score", "Score", fmt=lambda v: f"{v:.1f}"),
Column("price_usd", "Preis", fmt=lambda v: f"${v:,.4f}"),
]
rows = [
{"symbol": "ABC", "score": 8.4, "price_usd": 0.0123},
{"symbol": "XYZ", "score": 6.1, "price_usd": 1.5},
]
write_csv("scan.csv", columns, rows) # schema-definiertes CSV, stabile Spaltenreihenfolge
print(to_markdown(columns, rows)) # gleiche Spalten, Markdown-Tabelle
Beide Ausgaben verwenden exakt dieselben Spalten in derselben Reihenfolge, sodass das CSV und die Digest-Tabelle immer übereinstimmen.
Anzuwendendes Muster
- Deklariere jede
Column(key, header, fmt=...)einmal; beide Schreiber konsumieren dieselbe Liste, sodass Kopfzeilen und Reihenfolge synchron bleiben. - Halte die Spaltenreihenfolge stabil und explizit – verlasse dich nicht auf die Dict-Einfügereihenfolge beliebiger Zeilen.
- Überlasse dem
fmt-Callable die Präsentation (Währung, Rundung); speichere Rohwerte in den Zeilen-Dicts. - Verwende
csv.writerfür korrektes Quoting; maskiere|und Zeilenumbrüche in der Markdown-Tabelle, damit das Layout nie kaputt geht. - Behandle einen fehlenden Schlüssel als leere Zelle, anstatt abzustürzen, sodass unvollständige Zeilen trotzdem berichtet werden.
Referenz: assets/report.py.
Quelle
Destilliert aus dem produktiven Einsatz in den Automatisierungsprojekten des Autors. v1.0.0. Siehe auch: [[pr-body-formatter]], [[sqlite-state]], [[telegram-alerter]].
→ Erstelle den vollständig lauffähigen Bot mit Trawlkit.