Programmieren für Ingenieure
Beispielprogramm Prozessdaten 1 - Dateien kopieren
Inhaltsverzeichnis
- 1) Willkommen
- 2) Mindset
- 3) Kursübersicht
- 4) Download und Installation
- 5) Hello World
- 6) Entwicklungsumgebung
- 7) Informationen finden
- 8) Variablen
- 9) String
- 10) Integer, Float
- 11) Boolean
- 12) Abfragen
- 13) while Schleifen
- 14) for Schleifen
- 15) List
- 16) Dictionary
- 17) None
- 18) Datentypen umwandeln
- 19) Funktionen
- 20) Module
- 21) Debugging
- 22) Übungen
- 23) Übung 1: Zahlen addieren
- 24) Übung 2: Groesseren Wert finden
- 25) Übung 3: Kreis Fläche und Umfang berechnen
- 26) Entwicklungsprozess
- 27) Beispielprogramm Prozessdaten 1: kopieren
- 28) Beispielprogramm Prozessdaten 2: auswerten
- 29) Einstellungen über Settings.xml
- 30) Logging
- 31) Exceptions
- 32) Übung 4: Praxisvorbereitung
- 33) Typische Fehler
- 34) Code Optimierung
- 35) Ausführung
- 36) Ausführung 1: IDE py cmd bat
- 37) Ausführung 2: Windows exe
- 38) Ausführung 3: Aufgabenplanung
- 39) Ausführung 4: Setup Raspberry Pi
- 40) Ausführung 5: Raspberry Pi Ausführung
- 41) Danke
In dieser und der nächsten Lektion werden wir uns zusammen den einfachen Prototyp des Beispiel Programmes anschauen.
In diesem Fall habe ich den kompletten Code natürlich schon vorbereitet, aber möchte mit dir zusammen die einzelnen Bestandteile genauer anschauen und erklären, damit du einen Eindruck davon bekommen kannst wie der Entwicklungsprozess abläuft.
Die Ausgangssituation kannst du dir wie folgt vorstellen:
Du hast eine .log Datei auf einem Anlagenrechner welche in jeder Zeile die Daten einer vermessenen Solarzelle enthält.
Diese bestehen aus einem Zeitstempel, der gemessenen Leistung und der Zuordnung zu einer Qualitätsklasse.
Das Endergebnis soll eine visuelle Darstellung der Leistungsverteilung und Qualitäts-Verteilung, sowie die Berechnung der Kennzahlen zum Durchsatz, min, max und durchschnittliche Leistung in einem gewählten Zeitraum sein.
Zunächst schauen wir uns den Teil zum Kopieren der Daten an.
In den meisten Produktionen befinden sich die Anlagenrechner, auf denen die Daten gespeichert werden, nicht im Gleichen Netzwerk wie der Rechner, auf dem die Auswertungen ausgeführt werden.
Deshalb schreiben wir zuerst ein kleines Programm, welches die Daten kopiert und bei Bedarf zum Beispiel auf einem zusätzlichen Rechner mit mehreren Netzwerkkarten und Zugang zu beiden Netzwerken ausgeführt werden kann.
Um den Prototyp einfach, leicht verständlich und flexible zu halten definieren wir uns deshalb zu Beginn unseres Programmes zwei Variablen, in denen wir die Quelle und das Ziel des Kopiervorganges speichern können.
quellOrdner = r“.\Anlagendaten“
zielOrdner = r“.\ZuProzessieren“
Anschließend bauen wir uns seine Schleife die über alle Dateien in dem angegebenen Quell-Ordner sowie allen Unterordnern iteriert.
Und das wäre vermutlich schon die erste Stelle, an der du eine kurze Google Suche starten kannst, falls du eine solche Schleife noch nie genutzt hast.
In diesem Fall kannst du also einfach nach “Python Dateien in Ordner und Unterordnern iterieren” suchen, oder noch besser nach “python iterate files in folder”.
Und selbst wenn du nicht gut Englisch sprichst, wirst du schon bald wirst du schon sehr bald feststellen, dass du die in der Antwort enthaltenen Code Abschnitte trotzdem sehr gut verstehen wirst, da diese weder in Deutsch noch Englisch, sondern eben Python geschrieben sind.
Mit der Zeit wirst du natürlich immer mehr solcher Bausteine bereits einmal in einer ähnlichen Form genutzt und dabei gelernt haben, aber für den Anfang solltest du keinesfalls davor zurück scheuen eine kurze Suchanfrage zu starten.
Für das Beispielprogramm werden wir folgenden Baustein verwenden:
import os
for pfad, unterverzeichnisse, dateien in os.walk(quellOrdner):
for datei in dateien:
Im nächsten Schritt werden wir für jede Datei den Pfad und Dateinamen kombinieren sowie das Ziel für den Kopiervorgang festlegen.
Und auch an dieser Stelle solltest du nicht zögern kurz bei Google nachzuschauen falls du so etwas noch nie zuvor gemacht hast.
Wir verwenden dafür:
quelle = os.path.join(pfad, datei)
ziel = quelle.replace(quellOrdner, zielOrdner)
Da wir nicht sicher sein können, dass der Zielordner bereits existier, werden wir das vor dem Kopieren noch prüfen und ihn bei Bedarf erstellen.
Und wie immer:
Du hast so etwas schon einmal gemacht? – wunderbar!
Oder du weißt nicht genau wie du prüfen kannst ob ein Ordner existiert oder du einen neuen Ordner erstellst? – Auf zu Google! 😉
if not os.path.exists(os.path.dirname(ziel)):
os.makedirs(os.path.dirname(ziel))
Jetzt wollen wir nur noch die aktuelle Datei von der Quelle zum Ziel kopieren und können dafür die praktische copy2() Funktion des shutil Moduls nutzen:
from shutil import copy2
copy2(quelle, ziel)
Zuletzt lohnt es sich an dieser Stelle 3 Minuten Zeit zu investieren, um einige Kommentare zu ergänzen die anderen Entwicklern oder dir selbst in 3 Monaten enorm dabei helfen werden die Funktion des Codes zu verstehen.
Alles zusammen ergibt dann also den folgenden Code, den du auch in der DateienKopieren.py Datei im BeispielprogrammProzessdaten Ordner finden kannst:
import os
from shutil import copy2quellOrdner = r“.\Anlagendaten“
zielOrdner = r“.\ZuProzessieren“# Schleife über alle Dateien in einem Ordner und allen Unterordnern
for pfad, unterverzeichnisse, dateien in os.walk(quellOrdner):
for datei in dateien:
# Pfad und Dateinamen kombinieren
quelle = os.path.join(pfad, datei)
ziel = quelle.replace(quellOrdner, zielOrdner)# Zielverzeichnis erstellen falls es noch nicht existiert
if not os.path.exists(os.path.dirname(ziel)):
os.makedirs(os.path.dirname(ziel))
# Datei kopieren
copy2(quelle, ziel)
Diesen Code habe ich natürlich nicht wie eine Chat Nachricht von Anfang bis Ende durchgetippt.
Stattdessen musste ich einzelne Bausteine immer wieder verändern, habe verschiedene Funktionen ausprobiert und das gesamte Programm solange getestet und angepasst bis ich mit der Funktionalität zufrieden war.
Es mag übermenschliche Entwickler geben, die so etwas problemlos in einem Aufwasch von vorn bis hinten durch entwickeln können.
Ich gehöre allerdings nicht dazu aber kann dir aus Erfahrung versichern, dass das überhaupt kein Problem oder Grund zur Schande ist, weil alle Nutzer von der Funktionalität begeistert sein werden und sich nicht für den Entwicklungsprozess interessieren.
In der nächsten Lektion werden wir uns analog hierzu den Code zum Prozessieren der Daten anschauen.
Wenn du an dieser Stelle noch Fragen hast, dann zögere bitte nicht mich zu fragen.
Schön, dass du den ersten Schritt in Richtung praktische Anwendung mit mir zusammen gemacht hast und ich freue mich schon sehr darauf dich gleich in der nächsten Lektion wiederzusehen =)