Criação de Template de Relatório Semanal

PythonBeginner
Pratique Agora

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.

  1. Abra o arquivo report.py no seu editor de código.
  2. Localize a função create no código.
  3. 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.

  1. 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".

  1. 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.

  1. 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.

  1. 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.

  1. Para gerar os templates de relatório semanal, execute o script report.py com o comando python report.py no 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.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar