Erstellung von Wochenberichtsvorlagen

PythonBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du ein Wochenberichtsvorlage für ein neues Projektteam erstellst. Der Wochenbericht wird verwendet, um die täglichen Arbeiten des Projektteams zusammenzufassen, um regelmäßige Überprüfungen durchzuführen.

👀 Vorschau

## Beispiel

## start_date = datetime.date(2023,10,1)      Sonntag
## end_date = datetime.date(2023,10,16)       Montag
$ ls weekly
2023-10-06.txt  2023-10-13.txt  2023-10-16.txt
$ cat 2023-10-06.txt
2023-10-02
2023-10-03
2023-10-04
2023-10-05
2023-10-06
$ cat 2023-10-16.txt
2023-10-16

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du einen Ordner namens "weekly" erstellst, um die Dateien mit den Wochenberichtsvorlagen zu speichern
  • Wie du den Freitag der Woche, die den Startdatum enthält, bestimmst
  • Wie du die Dateien mit den Wochenberichtsvorlagen im Ordner "weekly" schreibst
  • Wie du das Enddatum auf den vorangegangenen Freitag anpasst, wenn es am Samstag oder Sonntag fällt
  • Wie du die endgültige Datei mit der Wochenberichtsvorlage für die letzte Woche des Projekts erstellst

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Wochenberichtsvorlagen automatisch basierend auf den Projektstart- und Enddatum zu generieren
  • Sicherzustellen, dass die Wochenberichtsvorlagen nur Werktage enthalten und Wochenenden ausschließen
  • Das Enddatum auf den vorangegangenen Freitag anzupassen, wenn es am Wochenende fällt
  • Eine konsistente und organisierte Struktur für das Speichern der Wochenberichtsvorlagen zu erstellen

Erstelle den Ordner 'weekly'

In diesem Schritt lernst du, wie du den Ordner "weekly" erstellst, um die Dateien mit den Wochenberichtsvorlagen zu speichern.

  1. Öffne die Datei report.py in deinem Code-Editor.
  2. Lasse den create-Funktion im Code auf den.
  3. Füge innerhalb der create-Funktion folgenden Code hinzu, um den Ordner "weekly" zu erstellen:
import os

def create(start_date, end_date):
    ## Erstelle den Ordner "weekly"
    os.makedirs("weekly", exist_ok=True)

    ## Rest des Codes...

Die Zeile os.makedirs("weekly", exist_ok=True) erstellt den Ordner "weekly" im selben Verzeichnis wie die Datei report.py. Der Parameter exist_ok=True stellt sicher, dass der Ordner auch dann erstellt wird, wenn er bereits existiert, was einen Fehler verhindert.

Bestimme den Freitag der Woche mit dem Startdatum

In diesem Schritt lernst du, wie du den Freitag der Woche findest, die das Startdatum enthält.

  1. Füge im create-Funktion nach der Ordnererstellung folgenden Code hinzu:
import datetime

def create(start_date, end_date):
    ## Erstelle den Ordner "weekly"
    os.makedirs("weekly", exist_ok=True)

    ## Finde den Freitag der Woche mit dem Startdatum
    current_date = start_date
    while current_date.weekday()!= 4:  ## 4 steht für Freitag
        current_date += datetime.timedelta(days=1)

    ## Rest des Codes...

Der Code verwendet eine while-Schleife, um die Tage beginnend vom Startdatum durchzugehen, bis das aktuelle Datum ein Freitag (Wochentag 4) ist. Dadurch wird sichergestellt, dass die Variable current_date auf den Freitag der Woche mit dem Startdatum gesetzt ist.

Schreibe die Wochenberichtsvorlagen-Dateien

In diesem Schritt lernst du, wie du die Dateien mit den Wochenberichtsvorlagen im Ordner "weekly" schreibst.

  1. Füge im create-Funktion nach dem Finden des Freitags der Woche mit dem Startdatum folgenden Code hinzu:
def create(start_date, end_date):
    ## Erstelle den Ordner "weekly"
    os.makedirs("weekly", exist_ok=True)

    ## Finde den Freitag der Woche mit dem Startdatum
    current_date = start_date
    while current_date.weekday()!= 4:  ## 4 steht für Freitag
        current_date += datetime.timedelta(days=1)

    ## Gehe den Zeitraum von Freitag der Woche mit dem Startdatum bis zum Enddatum durch
    while current_date <= end_date:
        ## Konstruiere den Dateinamen
        file_name = current_date.strftime("%Y-%m-%d") + ".txt"
        file_path = os.path.join("weekly", file_name)

        ## Schreibe die Dateiinhalt
        with open(file_path, "w") as file:
            ## Schreibe den Zeitraum der Werktage vom Startdatum bis zum aktuellen Freitag (ohne Wochenenden)
            date = max(
                start_date, current_date - datetime.timedelta(days=6)
            )  ## Stelle sicher, dass das Startdatum nicht früher als eine Woche vor dem aktuellen Freitag ist

            while date <= current_date:
                if date.weekday() < 5:  ## 0 steht für Montag, 4 steht für Freitag
                    file.write(date.strftime("%Y-%m-%d") + "\n")
                date += datetime.timedelta(days=1)

        ## Aktualisiere den aktuellen Freitag auf den nächsten Freitag
        current_date += datetime.timedelta(days=7)

    ## Rest des Codes...

Der Code verwendet eine while-Schleife, um den Zeitraum von Freitag der Woche mit dem Startdatum bis zum Enddatum durchzugehen. Für jeden Freitag erstellt er eine Datei mit dem Wochenberichtsvorlage im Ordner "weekly" mit dem Datum des Freitags als Dateinamen.

Innerhalb jeder Datei schreibt der Code den Zeitraum der Werktage vom Startdatum (oder einer Woche vor dem aktuellen Freitag, je nachdem, was später ist) bis zum aktuellen Freitag, wobei die Wochenenden ausgeschlossen sind.

Anpassen des Enddatums an den vorangegangenen Freitag, sofern erforderlich

In diesem Schritt lernst du, wie du das Enddatum auf den vorangegangenen Freitag anpasst, wenn es am Samstag oder Sonntag fällt.

  1. Füge im create-Funktion nach der Schleife, die die Dateien mit den Wochenberichtsvorlagen schreibt, folgenden Code hinzu:
def create(start_date, end_date):
    ## Erstelle den Ordner "weekly"
    os.makedirs("weekly", exist_ok=True)

    ## Finde den Freitag der Woche mit dem Startdatum
    #... (vorherige Schritte)

    ## Gehe den Zeitraum von Freitag der Woche mit dem Startdatum bis zum Enddatum durch
    #... (vorheriger Schritt)

    ## Passt das Enddatum auf den vorangegangenen Freitag an, wenn es am Samstag oder Sonntag fällt
    if end_date.weekday() == 5:  ## 5 steht für Samstag
        end_date -= datetime.timedelta(days=1)
    elif end_date.weekday() == 6:  ## 6 steht für Sonntag
        end_date -= datetime.timedelta(days=2)

    ## Rest des Codes...

Der Code überprüft, ob das Enddatum am Samstag (Wochentag 5) oder Sonntag (Wochentag 6) fällt. Wenn ja, wird das Enddatum auf den vorangegangenen Freitag angepasst, indem jeweils 1 oder 2 Tage subtrahiert werden.

Dadurch wird sichergestellt, dass der Wochenberichtsvorlage für die letzte Woche nur die Werktage von Montag bis zum angepassten Enddatum enthält, wobei die Wochenenden ausgeschlossen sind.

Erstelle die Endwochenberichtsvorlagen-Datei

In diesem Schritt lernst du, wie du die Datei mit dem Wochenberichtsvorlage für die letzte Woche erstellst, beginnend am Montag der Woche, die das angepasste Enddatum enthält.

  1. Füge im create-Funktion nach der Anpassung des Enddatums folgenden Code hinzu:
def create(start_date, end_date):
    ## Erstelle den Ordner "weekly"
    os.makedirs("weekly", exist_ok=True)

    ## Finde den Freitag der Woche mit dem Startdatum
    #... (vorherige Schritte)

    ## Gehe den Zeitraum von Freitag der Woche mit dem Startdatum bis zum Enddatum durch
    #... (vorherige Schritte)

    ## Passt das Enddatum auf den vorangegangenen Freitag an, wenn es am Samstag oder Sonntag fällt
    #... (vorheriger Schritt)

    ## Erstelle eine Einreichung für die Woche von Montag bis zum angepassten Enddatum
    ## Finde den Montag der Woche mit dem angepassten Enddatum
    current_date = end_date

    ## Konstruiere den Dateinamen
    file_name = current_date.strftime("%Y-%m-%d") + ".txt"
    file_path = os.path.join("weekly", file_name)

    while current_date.weekday()!= 0:  ## 0 steht für Montag
        current_date -= datetime.timedelta(days=1)

    ## Schreibe den Dateiinhalt
    with open(file_path, "w") as file:
        ## Schreibe den Zeitraum der Werktage von Montag bis zum angepassten Enddatum (ohne Wochenenden)
        date = current_date
        while date <= end_date:
            if date.weekday() < 5:  ## 0 steht für Montag, 4 steht für Freitag
                file.write(date.strftime("%Y-%m-%d") + "\n")
            date += datetime.timedelta(days=1)

Der Code findet zunächst den Montag der Woche, die das angepasste Enddatum enthält. Anschließend konstruiert er den Dateinamen für die letzte Woche des Wochenberichtsvorlage und öffnet die Datei zum Schreiben.

Innerhalb der Datei schreibt der Code den Zeitraum der Werktage von Montag bis zum angepassten Enddatum, wobei die Wochenenden ausgeschlossen sind.

Dadurch wird sichergestellt, dass die Datei mit dem Wochenberichtsvorlage für die letzte Woche nur die Werktage von Montag der Woche, die das angepasste Enddatum enthält, bis zum angepassten Enddatum selbst enthält.

Mit den obigen Schritten hast du die Implementierung der create-Funktion in der report.py-Datei abgeschlossen, die die Wochenberichtsvorlagen basierend auf den angegebenen Start- und Enddaten generiert.

  1. Um die Wochenberichtsvorlagen zu generieren, führe das report.py-Skript mit dem Befehl python report.py in deiner Konsole aus. Das Skript wird die Wochenberichtsvorlagen basierend auf den angegebenen Start- und Enddaten erstellen.

Einige Beispiele werden unten bereitgestellt:


## Beispiel 1

## start_date = datetime.date(2023,10,1)      Sonntag
## end_date = datetime.date(2023,10,16)       Montag
$ ls weekly
2023-10-06.txt  2023-10-13.txt  2023-10-16.txt
$ cat 2023-10-06.txt
2023-10-02
2023-10-03
2023-10-04
2023-10-05
2023-10-06
$ cat 2023-10-16.txt
2023-10-16

## Beispiel 2

## start_date = datetime.date(2023,9,10)     Sonntag
## end_date = datetime.date(2023,9,24)       Sonntag
$ ls weekly
2023-09-15.txt  2023-09-22.txt
$ cat 2023-09-15.txt
2023-09-11
2023-09-12
2023-09-13
2023-09-14
2023-09-15
$ cat 2023-09-22.txt
2023-09-18
2023-09-19
2023-09-20
2023-09-21
2023-09-22

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben