Archivierung

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Schönen guten Tag,

Ich wollte habe nun mein erstes "größeres" Programm fast fertig geschrieben:

Was noch Ich noch machen möchte sind die try/except Bedingungen sinnvoll nutzen -> also im main abfangen wo es sinnvoll ist und oben habe Ich ein kleines Fenster das zwischenschritte später ausgibt aber das sind nur ein paar Feinheiteten jedoch wollte Ich mal dazu euer Feedback hören.


Was soll mein Programm machen:

Ich habe auf einem Rechner ein Programm laufen das jeden Monat und jedes Jahr Messdaten in Datein zusammenfasst.Diese Datein werden auf eine Nas und auf eine Externefestplatte gespeichert.Das Problem ist das die Festplatte auf der die Messdaten liegen nicht besonders groß ist ( es passt max 1 Jahr drauf).Ich werde das Skript mit dem "Aufgabenplaner" so einstellen das es 1 mal am Tag ausgeführt wird.Mir war es jedoch wichtig das die Medien sich untereinander austauschen ( da es sein kann das die Externefestplatte zwischendurch von dem Rechner entfernt wird wodurch es sein kann das auf dem Rechner mit dem Messdaten die Daten zum Beispiel aus einem vergangen Jahr nicht mehr vorhanden sind und diese dann eventuell fehlen könnten.



Code: Alles auswählen

from pathlib import Path
import tkinter
from tkinter import messagebox
import shutil
import time
import os

# Festlegung der Pfade
PFAD_ZUR_NAS = Path(r"E:\NAS_Dummy")
PFAD_ZUR_EXTERNEN_FESTPLATTE = Path(r"E:\Externefestplatte_Dummy")
PFAD_ZUR_FERTIGDATEN = Path(r"C:\Users\Marcel\Desktop\Fertigdaten_Dummy")





def informationsfenster(Ausgabe):
    root = tkinter.Tk()
    root.withdraw()
    root.after(10000, lambda: root.destroy())
    messagebox.showinfo("Information",Ausgabe)


def prueft_ob_ober_Ordner_struktur_vorhanden_ist(pfad_Medium,pfad_fertigdaten):
    """Hier wird geprüft ob die Pfade bestehen und die Ordner erzeugt"""

    if pfad_Medium.exists():
        (pfad_Medium/"Jahre").mkdir(exist_ok=True)
        (pfad_Medium/"Monate").mkdir(exist_ok=True)
        for file in pfad_fertigdaten.glob('*_01.wrt'):
            jahr = file.name.split("_")[1]
            (pfad_Medium/"Jahre"/jahr).mkdir(exist_ok=True)
            (pfad_Medium / "Monate" / jahr).mkdir(exist_ok=True)


def prueft_ob_daten_aus_fertigdaten_vorhanden_sind_in_Medium(pfad_medium,pfad_fertigdaten):
    fehlende_fertigdaten_auf_Medium = []

    for file in pfad_fertigdaten.iterdir ():
        if not (pfad_medium / file.name).exists ():
            if file.name not in ("Fertigdaten.wrt", "Fertigdaten_konsistenz.wrt", ".fertig.wrt"):
                fehlende_fertigdaten_auf_Medium.append (file.name)
    return fehlende_fertigdaten_auf_Medium


def fehlende_monats_daten_in_medium_kopieren(fehlende_daten,pfad_Medium,pfad_fertigdaten):
    for file in fehlende_daten:
        datei_monat_jahr_ordner = file.split ("_") [1]  # In dem Ordner Monate werden die Datein nochmal in Jahre unterteilt hier wird in diesem Ordner das Jahr zugeteilt
        shutil.copy (pfad_fertigdaten / file, pfad_Medium / "Monate" / datei_monat_jahr_ordner)





def  fehlende_jahres_daten_in_medium_kopieren(pfad_medium,pfad_fertigdaten):
    if (pfad_fertigdaten / ".fertig.wrt").exists ():
        jahre = str ((time.localtime (os.path.getmtime (pfad_fertigdaten / ".fertig.wrt")).tm_year) - 1)
        if not (pfad_medium / "Jahre" / jahre).exists ():
            (pfad_medium / "Jahre" / jahre).mkdir (exist_ok = True)
        shutil.copy (pfad_fertigdaten / ".fertig.wrt", pfad_medium / "Jahre" / jahre)





def differenz_monate_zwischen_beiden_medien_pruefen(pfad_nas,pfad_externefestplatte):
    """Noch in Arbeit"""

    alle_daten_nas=[]
    alle_daten_externefestplatte=[]
    daten_von_nas_auf_externefestplatte=[]
    daten_von_externefestplatte_auf_nas =[]

    for ordner in (pfad_nas).iterdir():
        for file in (pfad_nas/ordner).iterdir():
            alle_daten_nas.append(file.name)

    for ordner in (pfad_externefestplatte).iterdir():
        for file in (pfad_externefestplatte/ordner).iterdir():
            alle_daten_externefestplatte.append(file.name)


    if alle_daten_nas != alle_daten_externefestplatte:
        print("Ausgleich eingeleitet")
        for file in alle_daten_nas:
            if file not in alle_daten_externefestplatte:
                daten_von_nas_auf_externefestplatte.append(file)
                print("Auf der Externenfestplatte fehlt die Datei",file)
        for file in alle_daten_externefestplatte:
            if file not in alle_daten_nas:
                daten_von_externefestplatte_auf_nas.append(file)
                print("Auf der NAS fehlt die Datei", file)

        if len(daten_von_nas_auf_externefestplatte) >0:
            for file in daten_von_nas_auf_externefestplatte:
                ordner_name=file.split("_")[1]
                if not (pfad_externefestplatte/ordner_name).exists():
                    (pfad_externefestplatte / ordner_name).mkdir(exist_ok=True)
                shutil.copy(pfad_nas/ordner_name/file,pfad_externefestplatte/ordner_name)
                print(file,"wurde auf die Externefestplatte kopiert")

        if len(daten_von_externefestplatte_auf_nas)>0:
            for file in daten_von_externefestplatte_auf_nas:
                ordner_name=file.split("_")[1]
                if not (pfad_nas/ordner_name).exists():
                    (pfad_nas/ordner_name).mkdir(exist_ok=True)
                shutil.copy(pfad_externefestplatte/ordner_name/file,pfad_nas/ordner_name)
                print(file,"wurde auf die Nas kopiert")
    else:informationsfenster("Der Datenbestand ist auf beiden Medien gleich!")







    """Hier werden nur die Ordner aufgelistet die auch eine Datei beinhalten"""
def differenz_jahre_zwischen_beiden_medien_pruefen(pfad_nas, pfad_externefestplatte):
    alle_daten_nas = {}
    alle_daten_externefestplatte = {}

    """Hier werden nur die Ordner aufgelistet die auch eine Datei beinhalten"""
    for ordner in (pfad_nas).iterdir ():
        for file in (pfad_nas / ordner).iterdir ():
            ordner_name = file.parts [3]
            datei_name = file.parts [4]
            alle_daten_nas [ordner_name] = datei_name

    for ordner in (pfad_externefestplatte).iterdir ():
        for file in (pfad_externefestplatte / ordner).iterdir ():
            ordner_name = file.parts [3]
            datei_name = file.parts [4]
            alle_daten_externefestplatte [ordner_name] = datei_name

    if alle_daten_nas != alle_daten_externefestplatte:
        print("nicht gleich")
        # if len(alle_daten_nas)>len(alle_daten_externefestplatte):
        for jahr_ordner in alle_daten_nas.keys ():
            if not (pfad_externefestplatte / jahr_ordner / ".fertig.wrt").exists ():
                (pfad_externefestplatte / jahr_ordner).mkdir (exist_ok = True)
                shutil.copy (pfad_nas / jahr_ordner / ".fertig.wrt", pfad_externefestplatte / jahr_ordner)
        # if len(alle_daten_externefestplatte) > len(alle_daten_nas):
        for jahr_ordner in alle_daten_externefestplatte.keys ():
            if not (pfad_nas / jahr_ordner / ".fertig.wrt").exists ():
                (pfad_nas / jahr_ordner).mkdir (exist_ok = True)
                shutil.copy (pfad_externefestplatte / jahr_ordner / ".fertig.wrt", pfad_nas / jahr_ordner)
    else:
        print ("sind gleich!")




def main():
    prueft_ob_ober_Ordner_struktur_vorhanden_ist(PFAD_ZUR_NAS,PFAD_ZUR_FERTIGDATEN)
    prueft_ob_ober_Ordner_struktur_vorhanden_ist(PFAD_ZUR_EXTERNEN_FESTPLATTE, PFAD_ZUR_FERTIGDATEN)
    fehlende_fertigdaten_auf_nas =prueft_ob_daten_aus_fertigdaten_vorhanden_sind_in_Medium(PFAD_ZUR_NAS,PFAD_ZUR_FERTIGDATEN)
    fehlende_fertigdaten_auf_externefestplatte=prueft_ob_daten_aus_fertigdaten_vorhanden_sind_in_Medium(PFAD_ZUR_EXTERNEN_FESTPLATTE,PFAD_ZUR_FERTIGDATEN)
    fehlende_monats_daten_in_medium_kopieren(fehlende_fertigdaten_auf_nas,PFAD_ZUR_NAS,PFAD_ZUR_FERTIGDATEN)
    fehlende_monats_daten_in_medium_kopieren(fehlende_fertigdaten_auf_externefestplatte, PFAD_ZUR_EXTERNEN_FESTPLATTE, PFAD_ZUR_FERTIGDATEN)
    fehlende_jahres_daten_in_medium_kopieren(PFAD_ZUR_NAS,PFAD_ZUR_FERTIGDATEN)
    differenz_monate_zwischen_beiden_medien_pruefen(PFAD_ZUR_NAS / "Monate", PFAD_ZUR_EXTERNEN_FESTPLATTE / "Monate")#Für Monate
    differenz_jahre_zwischen_beiden_medien_pruefen(PFAD_ZUR_NAS/"Jahre",PFAD_ZUR_EXTERNEN_FESTPLATTE/"Jahre")#Für Jahre


if __name__=="__main__":
    main()
Eine Vision ohne Aktion bleibe eine Illusion
Antworten