Programmieren für Ingenieure

Beispielprogramm Prozessdaten 1 - Dateien kopieren

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 copy2

quellOrdner = 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 =)

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert