Создание шаблона еженедельного отчета

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь создавать шаблон еженедельного отчета для новой проектной команды. Еженедельный отчет используется для суммирования ежедневной работы проектной команды для регулярного обзора.

👀 Предварительный просмотр

## example

## start_date = datetime.date(2023,10,1)      Sunday
## end_date = datetime.date(2023,10,16)       Monday
$ 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

🎯 Задачи

В этом проекте вы научитесь:

  • Создавать папку "weekly" для хранения файлов шаблонов еженедельных отчетов
  • Определять пятницу недели, содержащую начальную дату
  • Записывать файлы шаблонов еженедельных отчетов в папку "weekly"
  • Корректировать конечную дату на предыдущую пятницу, если она выпадает на субботу или воскресенье
  • Создавать конечный файл шаблона еженедельного отчета для последней недели проекта

🏆 Достижения

После завершения этого проекта вы сможете:

  • Автоматически генерировать шаблоны еженедельных отчетов на основе начальной и конечной дат проекта
  • Убедиться, что шаблоны еженедельных отчетов включают только рабочие дни, исключая выходные
  • Корректировать конечную дату на предыдущую пятницу, если она выпадает на выходной день
  • Создать последовательную и организованную структуру для хранения шаблонов еженедельных отчетов

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python/BasicConceptsGroup -.-> python/variables_data_types("Variables and Data Types") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/while_loops("While Loops") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/FileHandlingGroup -.-> python/with_statement("Using with Statement") python/PythonStandardLibraryGroup -.-> python/date_time("Date and Time") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/variables_data_types -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} python/conditional_statements -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} python/while_loops -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} python/file_operations -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} python/with_statement -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} python/date_time -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} python/os_system -.-> lab-302784{{"Создание шаблона еженедельного отчета"}} end

Создайте папку weekly

В этом шаге вы научитесь создавать папку "weekly" для хранения файлов шаблонов еженедельных отчетов.

  1. Откройте файл report.py в вашем редакторе кода.
  2. Найдите функцию create в коде.
  3. Внутри функции create добавьте следующий код для создания папки "weekly":
import os

def create(start_date, end_date):
    ## Create the "weekly" folder
    os.makedirs("weekly", exist_ok=True)

    ## Rest of the code...

Строка os.makedirs("weekly", exist_ok=True) создает папку "weekly" в том же каталоге, что и файл report.py. Параметр exist_ok=True гарантирует, что папка создается даже если она уже существует, предотвращая ошибку.

Определите пятницу недели, содержащую начальную дату

В этом шаге вы научитесь определять пятницу недели, содержащую начальную дату.

  1. В функции create добавьте следующий код после создания папки:
import datetime

def create(start_date, end_date):
    ## Create the "weekly" folder
    os.makedirs("weekly", exist_ok=True)

    ## Find the Friday of the week containing the start date
    current_date = start_date
    while current_date.weekday()!= 4:  ## 4 represents Friday
        current_date += datetime.timedelta(days=1)

    ## Rest of the code...

В коде используется цикл while для перебора дней начиная от начальной даты до тех пор, пока текущая дата не будет пятницей (номер дня недели 4). Это гарантирует, что переменная current_date будет установлена на пятницу недели, содержащую начальную дату.

Записать файлы шаблонов еженедельных отчетов

В этом шаге вы научитесь записывать файлы шаблонов еженедельных отчетов в папку "weekly".

  1. В функции create добавьте следующий код после нахождения пятницы недели, содержащей начальную дату:
def create(start_date, end_date):
    ## Create the "weekly" folder
    os.makedirs("weekly", exist_ok=True)

    ## Find the Friday of the week containing the start date
    current_date = start_date
    while current_date.weekday()!= 4:  ## 4 represents Friday
        current_date += datetime.timedelta(days=1)

    ## Traverse the date range starting from the Friday of the start date's week
    while current_date <= end_date:
        ## Construct the file name
        file_name = current_date.strftime("%Y-%m-%d") + ".txt"
        file_path = os.path.join("weekly", file_name)

        ## Write file content
        with open(file_path, "w") as file:
            ## Write the range of weekdays from the start date to the current Friday (excluding weekends)
            date = max(
                start_date, current_date - datetime.timedelta(days=6)
            )  ## Ensure the start date is no earlier than one week before the current Friday

            while date <= current_date:
                if date.weekday() < 5:  ## 0 represents Monday, 4 represents Friday
                    file.write(date.strftime("%Y-%m-%d") + "\n")
                date += datetime.timedelta(days=1)

        ## Update the current Friday to the next Friday
        current_date += datetime.timedelta(days=7)

    ## Rest of the code...

В коде используется цикл while для перебора диапазона дат начиная от пятницы недели, содержащей начальную дату, до конечной даты. Для каждой пятницы он создает файл шаблона еженедельного отчета в папке "weekly" с датой пятницы в качестве имени файла.

Внутри каждого файла код записывает диапазон рабочих дней от начальной даты (или от недели до текущей пятницы, в зависимости от того, какой из них позже) до текущей пятницы, исключая выходные дни.

Корректировать конечную дату на предыдущую пятницу, если необходимо

В этом шаге вы научитесь корректировать конечную дату на предыдущую пятницу, если она выпадает на субботу или воскресенье.

  1. В функции create добавьте следующий код после цикла, который записывает файлы шаблонов еженедельных отчетов:
def create(start_date, end_date):
    ## Create the "weekly" folder
    os.makedirs("weekly", exist_ok=True)

    ## Find the Friday of the week containing the start date
    #... (предыдущие шаги)

    ## Traverse the date range starting from the Friday of the start date's week
    #... (предыдущий шаг)

    ## Adjust the end date to the previous Friday if it falls on a Saturday or Sunday
    if end_date.weekday() == 5:  ## 5 represents Saturday
        end_date -= datetime.timedelta(days=1)
    elif end_date.weekday() == 6:  ## 6 represents Sunday
        end_date -= datetime.timedelta(days=2)

    ## Rest of the code...

В коде проверяется, выпадает ли конечная дата на субботу (номер дня недели 5) или воскресенье (номер дня недели 6). Если да, то конечная дата корректируется на предыдущую пятницу путём вычитания 1 или 2 дней соответственно.

Это гарантирует, что шаблон еженедельного отчета для последней недели включает только рабочие дни от понедельника до скорректированной конечной даты, исключая выходные дни.

Создать файл шаблона еженедельного отчета для последней недели

В этом шаге вы научитесь создавать файл шаблона еженедельного отчета для последней недели, начиная с понедельника недели, содержащей скорректированную конечную дату.

  1. В функции create добавьте следующий код после корректировки конечной даты:
def create(start_date, end_date):
    ## Create the "weekly" folder
    os.makedirs("weekly", exist_ok=True)

    ## Find the Friday of the week containing the start date
    #... (предыдущие шаги)

    ## Traverse the date range starting from the Friday of the start date's week
    #... (предыдущие шаги)

    ## Adjust the end date to the previous Friday if it falls on a Saturday or Sunday
    #... (предыдущий шаг)

    ## Create a submission for the week from Monday to the adjusted end date
    ## Find the Monday of the week containing the adjusted end date
    current_date = end_date

    ## Construct the file name
    file_name = current_date.strftime("%Y-%m-%d") + ".txt"
    file_path = os.path.join("weekly", file_name)

    while current_date.weekday()!= 0:  ## 0 represents Monday
        current_date -= datetime.timedelta(days=1)

    ## Write file content
    with open(file_path, "w") as file:
        ## Write the range of weekdays from Monday to the adjusted end date (excluding weekends)
        date = current_date
        while date <= end_date:
            if date.weekday() < 5:  ## 0 represents Monday, 4 represents Friday
                file.write(date.strftime("%Y-%m-%d") + "\n")
            date += datetime.timedelta(days=1)

В коде сначала определяется понедельник недели, содержащей скорректированную конечную дату. Затем строится имя файла для шаблона еженедельного отчета для последней недели и открывается файл для записи.

Внутри файла код записывает диапазон рабочих дней от понедельника до скорректированной конечной даты, исключая выходные дни.

Это гарантирует, что файл шаблона еженедельного отчета для последней недели включает только рабочие дни от понедельника недели, содержащей скорректированную конечную дату, до самой скорректированной конечной даты.

С помощью вышеперечисленных шагов вы завершили реализацию функции create в файле report.py, которая генерирует шаблоны еженедельных отчетов на основе указанных начальной и конечной дат.

  1. Чтобы сгенерировать шаблоны еженедельных отчетов, запустите скрипт report.py с помощью команды python report.py в терминале. Скрипт создаст шаблоны еженедельных отчетов на основе указанных начальной и конечной дат.

Ниже приведены некоторые примеры:

## example 1

## start_date = datetime.date(2023,10,1)      Sunday
## end_date = datetime.date(2023,10,16)       Monday
$ 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

## example 2

## start_date = datetime.date(2023,9,10)     Sunday
## end_date = datetime.date(2023,9,24)       Sunday
$ 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
✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.