Введение
В этом проекте вы научитесь создавать шаблон еженедельного отчета для новой проектной команды. Еженедельный отчет используется для суммирования ежедневной работы проектной команды для регулярного обзора.
👀 Предварительный просмотр
## 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"
- Корректировать конечную дату на предыдущую пятницу, если она выпадает на субботу или воскресенье
- Создавать конечный файл шаблона еженедельного отчета для последней недели проекта
🏆 Достижения
После завершения этого проекта вы сможете:
- Автоматически генерировать шаблоны еженедельных отчетов на основе начальной и конечной дат проекта
- Убедиться, что шаблоны еженедельных отчетов включают только рабочие дни, исключая выходные
- Корректировать конечную дату на предыдущую пятницу, если она выпадает на выходной день
- Создать последовательную и организованную структуру для хранения шаблонов еженедельных отчетов
Создать папку еженедельного отчета
В этом шаге вы научитесь создавать папку "weekly" для хранения файлов шаблонов еженедельных отчетов.
- Откройте файл
report.pyв вашем редакторе кода. - Найдите функцию
createв коде. - Внутри функции
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 гарантирует, что папка создается даже если она уже существует, предотвращая ошибку.
Определить пятницу недели, содержащей начальную дату
В этом шаге вы научитесь определять пятницу недели, содержащую начальную дату.
- В функции
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".
- В функции
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" с датой пятницы в качестве имени файла.
Внутри каждого файла код записывает диапазон рабочих дней от начальной даты (или от недели до текущей пятницы, в зависимости от того, какой из них позже) до текущей пятницы, исключая выходные дни.
Корректировать конечную дату на предыдущую пятницу, если необходимо
В этом шаге вы научитесь корректировать конечную дату на предыдущую пятницу, если она выпадает на субботу или воскресенье.
- В функции
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 дней соответственно.
Это гарантирует, что шаблон еженедельного отчета для последней недели включает только рабочие дни от понедельника до скорректированной конечной даты, исключая выходные дни.
Создать файл шаблона финального еженедельного отчета
В этом шаге вы научитесь создавать файл шаблона еженедельного отчета для последней недели, начиная с понедельника недели, содержащей скорректированную конечную дату.
- В функции
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, которая генерирует шаблоны еженедельных отчетов на основе указанных начальной и конечной дат.
- Чтобы сгенерировать шаблоны еженедельных отчетов, запустите скрипт
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, чтобы улучшить свои навыки.



