HTML-Tabelle ergänzen

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
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Hallochen allerseits, ich versuche grad eine existierende HTML-Tabelle mit den Werten von Temperatursensoren zu ergänzen. Die jeweils letzte Zeile wird ergänzt:

Code: Alles auswählen

Temperatur=[]
# wird vom Sensor ausgelesen:
Grad = 4.99
with open ("Index.html", "r") as f:
    for zeile in f:
        Temperatur.append(zeile)
    x=len(Temperatur)
    #löschen des ersten und der letzten 5 Tags:
    Temmperatur_neu = Temperatur[1:x-5]

#erste Zeile neu schreiben:    
with open ("Index.html", "w") as f:
    f.write('<!DOCTYPE html>\n')

#den restlichen "Kopf" ergänzen:        
with open ("Index.html", "a") as f:
    for zeile in Temmperatur_neu:
        f.write(zeile)
        
# den Rest mit den Temperaturwerten zusammensetzen:            
endTag = ('\t\t\t<td>' + str(Grad) + '</td>\n', '\t\t</tr>\n', '\t</table>\n', '  </body>\n', '</html>')

#... und anhängen:
with open ("Index.html", "a") as f:
    for element in endTag:
        f.write(element)
    f.close

das passt soweit, aber kann das auch kürzer geschrieben werden?

Danke
Stefan
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

HTML parst und barbeitet man mit den entsprechenden Tools. In der Regel mit BeautifulSoup.

Namen werden in Python klein_mit_unterstrich geschrieben. Ausgenommen KONSTANTEN (komplett groß) und KlassenNamen (PascalCase).

Wenn man eine Datei mit "with" öffnet, muss man sie mit close nicht schließen.
Das macht bei dir aber keinen Unterschied, weil du close eh nicht aufrufst. Also kann die Zeile weg.
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Hallo, namen_richtig_schreiben wird das Leichteste sein :-), ... und für die BeautifulSoup brauch ich vermutlich etwas mehr Zeit...
Aber danke, bin halt nur der Gelegenheitsnutzer.

Stefan
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

BeautifulSoup läuft perfekt -> Danke :-)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Ich würde dafür Jinja2 verwenden.

Jinja2 ist eine Template Sprache, die es erlaubt Daten in ein HTML Dokument einzubetten.
Aber auch dabei gilt, dass man sich einmal mit dem Thema auseinander setzen muss um dann immer wieder von der Einfachheit zu profitieren. Wenn man das nicht möchte, bleibt einem nichts anderes übrig als immer umständlich zu arbeiten.

Das Python-Script liest das Template index.html und schreibt es dann zusammen mit den Daten in output.html

Code: Alles auswählen

from pathlib import Path
from jinja2 import Environment, PackageLoader, select_autoescape

TEMPERATURES = [12.4, 15.6, 14.1]


def main():
    env = Environment(loader=PackageLoader("html_table"), autoescape=select_autoescape())
    template = env.get_template("index.html")
    html = template.render(data={"temperatures": TEMPERATURES})

    (Path().absolute() / "output.html").write_text(html, encoding="utf-8")


if __name__ == "__main__":
    main()
Und das HTML Template für Jinja2 sähe so aus:

Code: Alles auswählen

<!doctype html>

<html lang="en">

<head>
    <title>Temperature Table</title>
</head>

<body>
    <table>
        <tr>
            <th>ID</th>
            <th>Temperature</th>
        </tr>
        {% for temperature in data["temperatures"] %}
        <tr>
            <td>{{loop.counter}}</td>
            <td>{{temperature}}°C</td>
        </tr>
        {% endfor %}
    </table>
</body>

</html>
Antworten