Page Title

Der Wiki wird derzeit überarbeitet: neue URL, neues Design, neue Inhalte!

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:baustelle:text-nach-dfs0

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
mikeurban:baustelle:text-nach-dfs0 [2019/09/13 17:07]
thomas [Zukünftige Entwicklungen]
mikeurban:baustelle:text-nach-dfs0 [2019/09/17 10:07] (aktuell)
robert [Skript Voreinstellung]
Zeile 1: Zeile 1:
-====== ​Dateienkonvertierer:​ csv nach dfs0 ======+====== ​Konvertieren von eHYD Minutenwerten ​nach dfs0  ======
  
 <note important>​ <note important>​
Zeile 8: Zeile 8:
 ===== Einleitung ===== ===== Einleitung =====
  
-Zeitreihen von Regendaten können als dfs0 Datei direkt in eine MIKE Software importiert werden. Mit Hilfe dieses {{ :​mikeurban:​baustelle:​python_script_konvertierer.zip |Python ​scripts}} können Sie Niederschlags-Minutensummen von einer csv Datei in ein dfs0 Datei konvertierten.+Zeitreihen von Regendaten können als dfs0 Datei direkt in eine MIKE Software importiert werden. Mit Hilfe dieses {{ :​mikeurban:​baustelle:​ehyd-nach-dfs0-v1.zip |Python ​Skripts}} können Sie Niederschlags-Minutensummen von einer csv Datei in ein dfs0 Datei konvertierten.
  
-Bezüglich der Ausgangsdaten (csv), ist die aktuelle Version 1.0 des Python ​scripts ​auf die Niederschlag-Minutensummen der [[https://​ehyd.gv.at/​|eHYD Plattform]] optimiert.+Bezüglich der Ausgangsdaten (csv), ist die aktuelle Version 1.0 des Python ​Skripts ​auf die Niederschlag-Minutensummen der [[https://​ehyd.gv.at/​|eHYD Plattform]] optimiert.
  
-Am Ende der Seite finden Sie Beispieldateien sowie das Python ​script ​selbst.+Am Ende der Seite finden Sie Beispieldateien sowie das Python ​Skript ​selbst.
  
-FIXME Umgang mit Lücken+==== Umgang mit Lückenwerten ==== 
 + 
 +In den Ausgangsdaten der Niederschlag-Minutensummen der eHYD Plattform können fehlende Messwerte vorkommen die als **'​Lücke'​** ​ gekennzeichnet sind. Während des Konvertierungsprozesses nach dfs0 werden ​Lücken ​mit dem Wert 0 (Null) ersetzt.
 ===== Voraussetzungen:​ Installation von Software ===== ===== Voraussetzungen:​ Installation von Software =====
  
-Für eine Anwendung des Python ​script ​sind folgende Software Voraussetzung:​+Für eine Anwendung des Python ​Skripts ​sind folgende Software Voraussetzung:​
  
   * [[mikeurban:​baustelle:​installation-python37-pythonnet|Installation von Python 3.7 mit Modul Pythonnet]]   * [[mikeurban:​baustelle:​installation-python37-pythonnet|Installation von Python 3.7 mit Modul Pythonnet]]
Zeile 26: Zeile 28:
  
  
-===== Script ​Voreinstellung =====+===== Skript ​Voreinstellung =====
  
-Vor der ersten Anwendung des Skripts ​FIXME muss innerhalb des scripts ​eine Pfadeinstellung vorgenommen werden, damit die  notwendigen, ​zuvor installierten MIKE SDK (Software Developement Kit) Dateien gefunden werden. ​+Vor der ersten Anwendung des {{ :​mikeurban:​baustelle:​ehyd-nach-dfs0-v1.zip |Skripts}} muss innerhalb des Skripts ​eine Pfadeinstellung vorgenommen werden, damit die  notwendigen,​ installierten MIKE SDK (Software Developement Kit) Dateien gefunden werden. ​
  
-  - Öffnen ​Sie das Python ​script ​mit Hilfe eines Texteditors. +  - Entzippen und öffnen ​Sie das Python ​Skript ​mit Hilfe eines Texteditors. 
-  - Auf Ihrem Rechner, suchen Sie den Ordner mit den MIKE SDK .dll Dateien. Dieser befindet sich innerhalb des Verzeichnisses ​der zuvor installierten ​MIKE SDK Software ​z.B.: C:\Program Files (x86)\DHI\2019\MIKE SDK\bin+  - Auf Ihrem Rechner, suchen Sie den Ordner mit den MIKE SDK .dll Dateien. Dieser befindet sich innerhalb des Verzeichnisses ​des [[mikeurban:​baustelle:​installation-mike-sdk|MIKE SDK]] z.B.: C:\Program Files (x86)\DHI\2019\MIKE SDK\bin
   - Kopieren Sie den Pfad des Ordners   - Kopieren Sie den Pfad des Ordners
-  - Innerhalb des Python ​scripts ​navigieren Sie bitte in die Zeile 16. Der zuvor kopierte Pfad muss innerhalb der Klammern von: sys.path.append(r‘Pfad/​‘), ​eingefügt werden. Bitte beachten Sie, dass dem Pfad **r‘** vorangestellt sowie **/‘** angehängt werden muss. +  - Innerhalb des Python ​Skripts ​navigieren Sie bitte in die Zeile 16. Der zuvor kopierte Pfad muss nach **'​SDK_Ordner = '​** ​eingefügt werden. Bitte beachten Sie, dass dem Pfad **r‘** vorangestellt sowie **/‘** angehängt werden muss. 
-  - Speichern Sie das script+  - Speichern Sie das Skript
  
 {{ :​mikeurban:​baustelle:​python_sdk_path.png?​600 |}} {{ :​mikeurban:​baustelle:​python_sdk_path.png?​600 |}}
  
  
-Die oben genannten Schritte zu den Voreinstellungen müssen nur einmal, vor der ersten Anwendung des Python ​scripts ​vorgenommen werden. ​+Die oben genannten Schritte zu den Voreinstellungen müssen nur einmal, vor der ersten Anwendung des Python ​Skripts ​vorgenommen werden. ​
  
 ===== Anwendung + Ablauf ===== ===== Anwendung + Ablauf =====
  
-FIXME eHyd-Webseite+{{ :​mikeurban:​baustelle:​ehyd_station.png?​600 |}}
  
 **(1)** Laden Sie die Minutensummen von der eHyd-Plattform herunter. Sie erkennen die Messstellen am orangefarbigen Punkt. Die Datei hat die Erweiterung csv. **(1)** Laden Sie die Minutensummen von der eHyd-Plattform herunter. Sie erkennen die Messstellen am orangefarbigen Punkt. Die Datei hat die Erweiterung csv.
  
-FIXME Ordner+{{ :​mikeurban:​baustelle:​ordner_setup_ehydkonvertierung.png?​600 |}}
  
-**(2)** Kopieren Sie bitte das Python ​script ​sowie die zu konvertierenden eHyd-Dateien in einen eigenen Ordner. Das script ​kann durch einen einfachen Doppelklick ausgeführt werden.+**(2)** Kopieren Sie bitte das Python ​Skript ​sowie die zu konvertierenden eHyd-Dateien in einen eigenen Ordner. Das Skript ​kann durch einen einfachen Doppelklick ausgeführt werden.
  
-FIXME Eingabeaufforderung+{{ :​mikeurban:​baustelle:​ehyd_konvertierer_cmd.png?​600 |}}
  
-**(3)** Dabei öffnet sich automatisch die Kommandozeile (cmd) in der Sie über die Anzahl der zu konvertierenden Dateien sowie den Fortschritt der Konvertierung informiert werden.+**(3)** Dabei öffnet sich automatisch die Kommandozeile (cmd) in der Sie über die Anzahl der zu konvertierenden Dateien sowie den Fortschritt der Konvertierung informiert werden. Nach erfolgreicher Konvertierung schließen Sie die Kommandozeile durch Klicken einer beliebigen Taste
  
-FIXME Ergebnis+{{ :​mikeurban:​baustelle:​ordner_results_ehydkonvertierung.png?​600 |}}
  
-**(4)** Automatisch wird jede .csv Dateien innerhalb des Ordners in eine dfs0 Datei umgewandelt. Die Dateinamen der dfs0 Dateien entsprechen jenen der csv Dateien. Nach erfolgreicher Konvertierung schließen Sie die Kommandozeile mit dem Befehl ''​exit''​+**(4)** Automatisch wird jede .csv Dateien innerhalb des Ordners in eine dfs0 Datei umgewandelt. Die Dateinamen der dfs0 Dateien entsprechen jenen der csv Dateien. ​
  
  
Zeile 63: Zeile 65:
 ===== Beispiel ===== ===== Beispiel =====
  
 +Bie diesen zwei Beispieldateien handelt es sich um eine Niederschlag-Minutensumme Originaldatei,​ heruntergeladen von der eHYD Plattform, und die daraus konvertierte dfs0 Datei. ​
  
 {{ :​mikeurban:​baustelle:​n-minutensummen-115642_csv.zip |}} {{ :​mikeurban:​baustelle:​n-minutensummen-115642_csv.zip |}}
Zeile 76: Zeile 78:
 ===== Anhang: Inhalt des Skripts ===== ===== Anhang: Inhalt des Skripts =====
  
-<file python ehyd-nach-dfs0.py>​+<file python ehyd-nach-dfs0-v1.py>
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 """​ """​
Zeile 83: Zeile 85:
 by: DHI 2019 - Version 1.0 - BSD-3 Lizenz by: DHI 2019 - Version 1.0 - BSD-3 Lizenz
  
-Wiki Seite: http://​wiki.mikepoweredbydhi.com/​mikeurban/​baustelle/​text-nach-dfs0+Wiki Seite: http://​wiki.mikepoweredbydhi.com/​mikeurban/​baustelle/​text-nach-dfs0?​do=edit ​
 """​ """​
 import clr import clr
Zeile 92: Zeile 94:
 import re import re
  
-sys.path.append(r'​C:​\Program Files (x86)\DHI\2019\MIKE SDK\bin/'​#Pfad zu den sdk assemblies+SDK_Ordner = r'​C:​\Program Files (x86)\DHI\2019\MIKE SDK\bin/'​ #Pfad zu den sdk assemblies 
 +if os.path.exists(SDK_Ordner):​ 
 +    sys.path.append(SDK_Ordner) 
 +else: 
 +    print('​SDK Ordner nicht gefunden'​) 
 +    os.system('​pause'​) 
 clr.AddReference("​DHI.Mike.Install"​) clr.AddReference("​DHI.Mike.Install"​)
 clr.AddReference("​DHI.Generic.MikeZero.DFS"​) clr.AddReference("​DHI.Generic.MikeZero.DFS"​)
Zeile 103: Zeile 111:
 from DHI.Generic.MikeZero.DFS import DfsFactory, DfsBuilder, DfsSimpleType,​ DataValueType from DHI.Generic.MikeZero.DFS import DfsFactory, DfsBuilder, DfsSimpleType,​ DataValueType
  
-print('​Python ​script ​zur Konvertierung von Niederschlagsminutensummen:​ csv --> dfs0' + '​\n'​ ++print('​Python ​Skript ​zur Konvertierung von Niederschlagsminutensummen:​ csv --> dfs0' + '​\n'​ +
       'Für weitere Informationen besuchen Sie bitte unsere Wiki Seite' + '​\n'​ +       'Für weitere Informationen besuchen Sie bitte unsere Wiki Seite' + '​\n'​ +
       'by DHI 2019' + '​\n'​ +       'by DHI 2019' + '​\n'​ +
Zeile 128: Zeile 136:
         with open(f_name_csv) as file_in: ​           ​         with open(f_name_csv) as file_in: ​           ​
             for line in file_in:             for line in file_in:
-                if re.search(r"​^\d{2}\.",​ line): #falls die Zeile mit zwei Zahlen und einem Punkt beginnt = Tag+                if re.search(r"​^\d{2}\.\d{2}\.\d{4}\ ​", line): #Datum checl: Falls Zeile mit ZZ.ZZ.ZZZZ ​beginnt ​(Z=Zahl)
                     columns = line.strip()                     columns = line.strip()
                     t_step.append(tuple([datetime.strptime(columns.split(';'​)[0].strip(),​ '​%d.%m.%Y ​ %H:​%M:​%S'​),​                     t_step.append(tuple([datetime.strptime(columns.split(';'​)[0].strip(),​ '​%d.%m.%Y ​ %H:​%M:​%S'​),​
Zeile 168: Zeile 176:
         ​         ​
         #Befüllen der dfs0 Datei         #Befüllen der dfs0 Datei
-        NoData = '​Lücke'​ 
         data1 = Array.CreateInstance(System.Single,​ len(t_step))         data1 = Array.CreateInstance(System.Single,​ len(t_step))
         xi = 0         xi = 0
         for x in t_step:         for x in t_step:
             dfsTime = datetime.timestamp(datetime(x[0].year,​ x[0].month, x[0].day, x[0].hour, x[0].minute,​ x[0].second,​ tzinfo=timezone.utc)) - time_start             dfsTime = datetime.timestamp(datetime(x[0].year,​ x[0].month, x[0].day, x[0].hour, x[0].minute,​ x[0].second,​ tzinfo=timezone.utc)) - time_start
-            data1[0] = float(0) if x[1] == NoData ​else (float(x[1])/​60*1000)+            data1[0] = float(0) if re.search(r"​[a-z]", ​x[1]else (float(x[1])/​60*1000) ​#Falls ein Eintrag einen Buchstaben enthält (==Lücke) enthält er den Wert 0
             dfs.WriteItemTimeStepNext(dfsTime,​ data1) #​WriteItemTimeStepNext(Time=Double,​ Data=Array)             dfs.WriteItemTimeStepNext(dfsTime,​ data1) #​WriteItemTimeStepNext(Time=Double,​ Data=Array)
             xi = xi+1             xi = xi+1
mikeurban/baustelle/text-nach-dfs0.1568387225.txt.gz · Zuletzt geändert: 2019/09/13 17:07 von thomas