Introdução
Neste projeto, você aprenderá como criar um modelo de relatório semanal para uma nova equipe de projeto. O relatório semanal é usado para resumir o trabalho diário da equipe do projeto para revisão regular.
👀 Visualização
## exemplo
## start_date = datetime.date(2023,10,1) Domingo
## end_date = datetime.date(2023,10,16) Segunda-feira
$ 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
🎯 Tarefas
Neste projeto, você aprenderá:
- Como criar uma pasta "weekly" para armazenar os arquivos de modelo de relatório semanal
- Como determinar a sexta-feira da semana que contém a data de início
- Como escrever os arquivos de modelo de relatório semanal na pasta "weekly"
- Como ajustar a data de término para a sexta-feira anterior se ela cair em um sábado ou domingo
- Como criar o arquivo final do modelo de relatório semanal para a última semana do projeto
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Gerar automaticamente modelos de relatório semanal com base nas datas de início e término do projeto
- Garantir que os modelos de relatório semanal incluam apenas dias úteis, excluindo os fins de semana
- Ajustar a data de término para a sexta-feira anterior se ela cair em um fim de semana
- Criar uma estrutura consistente e organizada para armazenar os modelos de relatório semanal
Criar a pasta 'weekly'
Nesta etapa, você aprenderá como criar a pasta "weekly" para armazenar os arquivos de modelo de relatório semanal.
- Abra o arquivo
report.pyno seu editor de código. - Localize a função
createno código. - Dentro da função
create, adicione o seguinte código para criar a pasta "weekly":
import os
def create(start_date, end_date):
## Create the "weekly" folder
os.makedirs("weekly", exist_ok=True)
## Rest of the code...
A linha os.makedirs("weekly", exist_ok=True) cria a pasta "weekly" no mesmo diretório do arquivo report.py. O parâmetro exist_ok=True garante que a pasta seja criada mesmo que já exista, evitando um erro.
Determinar a Sexta-feira da Semana da Data de Início
Nesta etapa, você aprenderá como encontrar a sexta-feira da semana que contém a data de início.
- Na função
create, adicione o seguinte código após a criação da pasta:
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...
O código usa um loop while para iterar pelos dias a partir da data de início até que a data atual seja uma sexta-feira (dia da semana 4). Isso garante que a variável current_date seja definida como a sexta-feira da semana que contém a data de início.
Escrever os Arquivos de Template do Relatório Semanal
Nesta etapa, você aprenderá como escrever os arquivos de template do relatório semanal na pasta "weekly".
- Na função
create, adicione o seguinte código após encontrar a sexta-feira da semana da data de início:
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...
O código usa um loop while para percorrer o intervalo de datas, começando pela sexta-feira da semana da data de início até a data de término. Para cada sexta-feira, ele cria um arquivo de template de relatório semanal na pasta "weekly" com a data da sexta-feira como o nome do arquivo.
Dentro de cada arquivo, o código escreve o intervalo de dias da semana a partir da data de início (ou uma semana antes da sexta-feira atual, o que for mais tarde) até a sexta-feira atual, excluindo os fins de semana.
Ajustar a Data Final para a Sexta-feira Anterior, se Necessário
Nesta etapa, você aprenderá como ajustar a data de término para a sexta-feira anterior, caso ela caia em um sábado ou domingo.
- Na função
create, adicione o seguinte código após o loop que escreve os arquivos de template do relatório semanal:
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
## ... (previous steps)
## Traverse the date range starting from the Friday of the start date's week
## ... (previous step)
## 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...
O código verifica se a data de término cai em um sábado (dia da semana 5) ou domingo (dia da semana 6). Se for o caso, ele ajusta a data de término para a sexta-feira anterior, subtraindo 1 ou 2 dias, respectivamente.
Isso garante que o template do relatório semanal para a semana final inclua apenas os dias da semana de segunda-feira até a data de término ajustada, excluindo os fins de semana.
Criar o Arquivo Final do Template do Relatório Semanal
Nesta etapa, você aprenderá como criar o arquivo de template do relatório semanal para a semana final, começando pela segunda-feira da semana que contém a data de término ajustada.
- Na função
create, adicione o seguinte código após ajustar a data de término:
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
## ... (previous steps)
## Traverse the date range starting from the Friday of the start date's week
## ... (previous steps)
## Adjust the end date to the previous Friday if it falls on a Saturday or Sunday
## ... (previous step)
## 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)
O código primeiro encontra a segunda-feira da semana que contém a data de término ajustada. Em seguida, constrói o nome do arquivo para o template do relatório semanal final e abre o arquivo para escrita.
Dentro do arquivo, o código escreve a faixa de dias da semana de segunda-feira até a data de término ajustada, excluindo os fins de semana.
Isso garante que o arquivo de template do relatório semanal final inclua apenas os dias da semana da segunda-feira da semana que contém a data de término ajustada até a própria data de término ajustada.
Com essas etapas acima, você concluiu a implementação da função create no arquivo report.py, que gera os templates de relatório semanal com base nas datas de início e término fornecidas.
- Para gerar os templates de relatório semanal, execute o script
report.pycom o comandopython report.pyno seu terminal. O script criará os templates de relatório semanal com base nas datas de início e término fornecidas.
Alguns exemplos são fornecidos abaixo:
## 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
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



