Hallo,
ich habe ein paar CSV, die ich gerne in eine schicke HTML-Tabelle zusammenführen mag.
Es gibt ja diverse Ansätze, dass zu machen, daher mal die Frage an Euch:
Macht jemand da schon was und wer kann mir da ein guten Ansatz empfehlen?
Euer Codergirl
CSV in schicke HTML-Tabelle
Soll einfach nur statisches HTML erzeugt werden? Dann kannst im Prinzip ein einfaches Skript schreiben und für das HTML eine Template-Engine nehmen. Jinja2 ist da sehr beliebt. Persönlich mag ich auch Mako und habe das auch für so etwas schon verwendet. Der Unterschied ist, dass man in Mako mehr oder weniger "normales" Python einbetten kann, was teilweise kritisch gesehen wird (Vermischung von Darstellung und Logik), aber bei solchen Projekt auch sehr praktisch sein kann.
Die Vorgehensweise ist in beiden Fällen gleich: Du bastelst dir ein entsprechendes Template, bei dem im Prinzip nur die Spaltenüberschriften und die Zeilen variabel sein müssen. In deinem Skript liest du die CSV Dateien ein, bereitest sie nach deinen Vorstellungen auf, packst sie in eine geeignete Datenstruktur und renderst dann mit diesen Daten als Kontext das Template als HTML. Wie schick das dann wird, hängt vom CSS/JS ab, das du dazu gibst
Da kann man bei Bedarf auf eines der gängigen Frontendframeworks (Bootstrap, Bulma, Foundation, ...) und/oder so etwas wie Datatables zurückgreifen.
Die Vorgehensweise ist in beiden Fällen gleich: Du bastelst dir ein entsprechendes Template, bei dem im Prinzip nur die Spaltenüberschriften und die Zeilen variabel sein müssen. In deinem Skript liest du die CSV Dateien ein, bereitest sie nach deinen Vorstellungen auf, packst sie in eine geeignete Datenstruktur und renderst dann mit diesen Daten als Kontext das Template als HTML. Wie schick das dann wird, hängt vom CSS/JS ab, das du dazu gibst

Hallo
es soll nur statisches HTML sein. Ich habe diverse Datenquellen, die ich in einem CSV zusammengeführt habe und die Daten will ich dann per HTML
zusammenfassen, um sie mit beliebigen Browsern bei uns im Netzwerk (Mom, Dad) anzuzeigen
es soll nur statisches HTML sein. Ich habe diverse Datenquellen, die ich in einem CSV zusammengeführt habe und die Daten will ich dann per HTML
zusammenfassen, um sie mit beliebigen Browsern bei uns im Netzwerk (Mom, Dad) anzuzeigen

Nur ein Mädchen, das nie so viel weiss, wie die Jungs 

- noisefloor
- User
- Beiträge: 4193
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
mit einer Template Engine wie Jinja2 erzeugst du eine normale HTML Seite. Innerhalb des Templates kannst du dann über die Zeilen der CSV Datei iterieren und so deine Tabellenzeilen bauen. Das ist also genau das, was du suchst.
Einfacher geht es nicht, dafür sind Template Engines da.
Gruß, noisefloor
mit einer Template Engine wie Jinja2 erzeugst du eine normale HTML Seite. Innerhalb des Templates kannst du dann über die Zeilen der CSV Datei iterieren und so deine Tabellenzeilen bauen. Das ist also genau das, was du suchst.
Einfacher geht es nicht, dafür sind Template Engines da.
Gruß, noisefloor
Hier mal ein simples Beispiel, wie das gemeint ist (HTML und Code Struktur muss man natürlich noch verbessern; das Template gehört später natürlich auch in eine eigene Datei):
(Daten von hier: https://data.europa.eu/euodp/de/data/da ... virus-data)
Und für ein ansprechenderes Layout kannst du dir ja eines der vielen fertigen Tabellen Templates aussuchen, die im Netz zu finden sind
Code: Alles auswählen
#!/usr/bin/env python3
import csv
from jinja2 import Template
TEMPLATE = '''
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Corona</title>
</head>
<body>
<table>
<thead>
<tr>
{% for item in headers %}
<th>{{ item }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>
{% for label, cell in row.items() %}
<td>{{ cell }}</td>
{% endfor %}
<tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
'''
def iter_csv(file):
with open(file, 'r', encoding='utf8') as fh:
reader = csv.DictReader(fh)
for row in reader:
yield row
def to_html(rows, template):
headers = list(rows[0].keys())
return template.render(headers=headers, rows=rows)
def main():
file = 'corona.csv'
rows = list(iter_csv(file))
template = Template(TEMPLATE)
html = to_html(rows, template)
print(html)
if __name__ == '__main__':
main()
Und für ein ansprechenderes Layout kannst du dir ja eines der vielen fertigen Tabellen Templates aussuchen, die im Netz zu finden sind
Hi zusammen,
das klappt super. Ich habe auch oben das etwas angepasst, dass das html in eine Datei geschrieben wird
Jetzt geh ich auf die Suche nach einem schicken Template
Müsste ja der Bereich nach TEMPLATE = ' ' ' sein
das klappt super. Ich habe auch oben das etwas angepasst, dass das html in eine Datei geschrieben wird

Jetzt geh ich auf die Suche nach einem schicken Template

Müsste ja der Bereich nach TEMPLATE = ' ' ' sein

Nur ein Mädchen, das nie so viel weiss, wie die Jungs 

[quote=nezzcarth post_id=369932
Und für ein ansprechenderes Layout kannst du dir ja eines der vielen fertigen Tabellen Templates aussuchen, die im Netz zu finden sind
[/quote]
Irgendwie tue ich mich schwer, da was zu finden. Hast du evt die ein oder andere Quelle zur Hand?
Nur wenn es nicht zu nervig ist
Danke
Codergirl
Und für ein ansprechenderes Layout kannst du dir ja eines der vielen fertigen Tabellen Templates aussuchen, die im Netz zu finden sind
[/quote]
Irgendwie tue ich mich schwer, da was zu finden. Hast du evt die ein oder andere Quelle zur Hand?
Nur wenn es nicht zu nervig ist
Danke
Codergirl
Nur ein Mädchen, das nie so viel weiss, wie die Jungs 

Schau mal, ob hier etwas bei ist:
https://colorlib.com/wp/css3-table-templates/
https://freshdesignweb.com/free-css-tables/
Stichworte wären hier z.B. table css templates. So findet man mehrere derartiger Sammlungen.
Ein anderer Ansatz ist, ein Tabellen-Element gängiger Frontframeworks zu nehmen. Viele haben so etwas an Bord (allerdings hat man damit ggf. etwas overhead):
https://bulma.io/documentation/elements/table/
https://getbootstrap.com/docs/4.0/content/tables/
https://milligram.io/tables.html
http://getskeleton.com/#tables
etc.
https://colorlib.com/wp/css3-table-templates/
https://freshdesignweb.com/free-css-tables/
Stichworte wären hier z.B. table css templates. So findet man mehrere derartiger Sammlungen.
Ein anderer Ansatz ist, ein Tabellen-Element gängiger Frontframeworks zu nehmen. Viele haben so etwas an Bord (allerdings hat man damit ggf. etwas overhead):
https://bulma.io/documentation/elements/table/
https://getbootstrap.com/docs/4.0/content/tables/
https://milligram.io/tables.html
http://getskeleton.com/#tables
etc.