zusammenfügen 02.2.
This commit is contained in:
87
Export.py
87
Export.py
@@ -1,19 +1,41 @@
|
||||
import csv
|
||||
|
||||
from datetime import datetime
|
||||
import numpy as np
|
||||
|
||||
import os
|
||||
import webbrowser
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class Export:
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
"""Hilfsfunktionen zum Exportieren von Ergebnissen und Protokollen.
|
||||
|
||||
Die Klasse stellt Methoden zur Verfügung für:
|
||||
|
||||
- Export von Matrizen in CSV-Dateien,
|
||||
- Export von Ausgleichungsergebnissen (Skalare und Matrizen) in CSV-Dateien,
|
||||
- Erzeugung und Speicherung eines HTML-Protokolls inklusive automatischem Öffnen im Browser.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def matrix_to_csv(dateiname: str, liste_spaltenbeschriftung: list, liste_zeilenbeschriftung: list, Matrix: np.matrix | sp.Matrix,
|
||||
beschriftung_kopfzeile: object = "") -> None:
|
||||
"""Schreibt eine Matrix mit Zeilen- und Spaltenbeschriftungen in eine CSV-Datei.
|
||||
|
||||
Die Ausgabe erfolgt mit Semikolon als Trennzeichen. Die Kopfzeile enthält optional eine
|
||||
zusätzliche Beschriftung sowie Spaltenbeschriftungen.
|
||||
Zudem werden Zeilenbeschriftungen durchgeführt.
|
||||
|
||||
:param dateiname: Pfad zu schreibenden CSV-Datei.
|
||||
:type dateiname: str
|
||||
:param liste_spaltenbeschriftung: Liste der Spaltenbeschriftungen.
|
||||
:type liste_spaltenbeschriftung: list
|
||||
:param liste_zeilenbeschriftung: Liste der Zeilenbeschriftungen.
|
||||
:type liste_zeilenbeschriftung: list
|
||||
:param Matrix: Zu exportierende Matrix.
|
||||
:type Matrix: np.matrix | sp.Matrix
|
||||
:param beschriftung_kopfzeile: Optionaler Eintrag in der linken oberen Zelle der Kopfzeile.
|
||||
:type beschriftung_kopfzeile: object
|
||||
:return: None
|
||||
:rtype: None
|
||||
"""
|
||||
with open(dateiname, "w", newline="", encoding="utf-8") as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=";")
|
||||
|
||||
@@ -26,6 +48,7 @@ class Export:
|
||||
zeile_als_text = [zeilenbeschriftung]
|
||||
for eintrag in zeile:
|
||||
try:
|
||||
# Dezimaltrenner von Punkt in Komma ändern, weil Python und Excel andere Konventionen vertreten.
|
||||
eintrag_text = str(eintrag).replace(".", ",")
|
||||
try:
|
||||
eintrag_text = float(eintrag_text)
|
||||
@@ -36,46 +59,24 @@ class Export:
|
||||
zeile_als_text.append(eintrag_text)
|
||||
writer.writerow(zeile_als_text)
|
||||
|
||||
@staticmethod
|
||||
def ausgleichung_to_datei(dateiname: str, dict_ausgleichung: dict) -> None:
|
||||
with open(dateiname, "w", newline="", encoding="utf-8") as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=";")
|
||||
def speichere_html_protokoll(metadaten: dict, ergebnisse: dict) -> None:
|
||||
"""Erzeugt ein HTML-Protokoll der Ausgleichungsergebnisse und speichert es als Datei.
|
||||
|
||||
writer.writerow(["Parameter", "Wert"])
|
||||
Es wird der Unterordner Protokolle angelegt, falls dieser noch nicht existiert.
|
||||
Das Protokoll wird als HTML-Datei gespeichert und anschließend im Browser geöffnet.
|
||||
|
||||
for key, value in dict_ausgleichung.items():
|
||||
Erwartete Schlüssel in metadaten sind u. a. "projekt", "bearbeiter" und "datum".
|
||||
Erwartete Schlüssel in ergebnisse sind u. a. "df_globaltest", "df_redundanz",
|
||||
"df_ellipsen", "df_konfidenzellipsen", "df_koordinaten_geozentrisch_kartesisch"
|
||||
und "df_koordinaten_utm". Die zugehörigen Werte müssen die Methode to_html bereitstellen.
|
||||
|
||||
if hasattr(value, "tolist"):
|
||||
rows = value.rows
|
||||
cols = value.cols
|
||||
|
||||
writer.writerow([key, f"Matrix {rows}x{cols}"])
|
||||
|
||||
for i, zeile in enumerate(value.tolist()):
|
||||
zeile_als_text = [f"{key}_zeile_{i+1}"]
|
||||
for eintrag in zeile:
|
||||
try:
|
||||
eintrag_float = float(eintrag)
|
||||
eintrag_text = f"{eintrag_float}".replace(".", ",")
|
||||
try:
|
||||
eintrag_text = float(eintrag_text)
|
||||
except:
|
||||
eintrag_text = eintrag_text
|
||||
except Exception:
|
||||
eintrag_text = str(eintrag)
|
||||
zeile_als_text.append(eintrag_text)
|
||||
writer.writerow(zeile_als_text)
|
||||
|
||||
else:
|
||||
try:
|
||||
value_float = float(value)
|
||||
value_text = f"{value_float}".replace(".", ",")
|
||||
except Exception:
|
||||
value_text = str(value)
|
||||
|
||||
writer.writerow([key, value_text])
|
||||
|
||||
def speichere_html_protokoll(metadaten, ergebnisse):
|
||||
:param metadaten: Dictionary mit Metadaten zum Protokoll.
|
||||
:type metadaten: dict
|
||||
:param ergebnisse: Dictionary mit Ergebnisobjekten (z. B. DataFrames) zur HTML-Ausgabe.
|
||||
:type ergebnisse: dict
|
||||
:return: None
|
||||
:rtype: None
|
||||
"""
|
||||
# Pfad für den Ordner erstellen
|
||||
ordner = "Protokolle"
|
||||
if not os.path.exists(ordner):
|
||||
|
||||
Reference in New Issue
Block a user