Creación de plantillas de informe semanal

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a crear un modelo de informe semanal para un nuevo equipo de proyecto. El informe semanal se utiliza para resumir el trabajo diario del equipo de proyecto para una revisión regular.

👀 Vista previa

## ejemplo

## start_date = datetime.date(2023,10,1)      Domingo
## end_date = datetime.date(2023,10,16)       Lunes
$ ls semanal
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

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo crear una carpeta "semanal" para almacenar los archivos de modelo de informe semanal
  • Cómo determinar el viernes de la semana que contiene la fecha de inicio
  • Cómo escribir los archivos de modelo de informe semanal en la carpeta "semanal"
  • Cómo ajustar la fecha de finalización al viernes anterior si cae un sábado o domingo
  • Cómo crear el archivo de modelo de informe semanal final para la última semana del proyecto

🏆 Logros

Después de completar este proyecto, podrás:

  • Generar automáticamente modelos de informe semanal basados en las fechas de inicio y finalización del proyecto
  • Asegurarse de que los modelos de informe semanal solo incluyan días hábiles, excluyendo los fines de semana
  • Ajustar la fecha de finalización al viernes anterior si cae en un fin de semana
  • Crear una estructura consistente y organizada para almacenar los modelos de informe semanal

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{{"Creación de plantillas de informe semanal"}} python/conditional_statements -.-> lab-302784{{"Creación de plantillas de informe semanal"}} python/while_loops -.-> lab-302784{{"Creación de plantillas de informe semanal"}} python/file_operations -.-> lab-302784{{"Creación de plantillas de informe semanal"}} python/with_statement -.-> lab-302784{{"Creación de plantillas de informe semanal"}} python/date_time -.-> lab-302784{{"Creación de plantillas de informe semanal"}} python/os_system -.-> lab-302784{{"Creación de plantillas de informe semanal"}} end

Crear la carpeta semanal

En este paso, aprenderás a crear la carpeta "semanal" para almacenar los archivos de modelo de informe semanal.

  1. Abra el archivo report.py en su editor de código.
  2. Localice la función create en el código.
  3. Dentro de la función create, agregue el siguiente código para crear la carpeta "semanal":
import os

def create(start_date, end_date):
    ## Crea la carpeta "semanal"
    os.makedirs("semanal", exist_ok=True)

    ## Resto del código...

La línea os.makedirs("semanal", exist_ok=True) crea la carpeta "semanal" en el mismo directorio que el archivo report.py. El parámetro exist_ok=True garantiza que la carpeta se cree incluso si ya existe, evitando un error.

Determinar el viernes de la semana de la fecha de inicio

En este paso, aprenderás a encontrar el viernes de la semana que contiene la fecha de inicio.

  1. En la función create, agregue el siguiente código después de la creación de la carpeta:
import datetime

def create(start_date, end_date):
    ## Crea la carpeta "semanal"
    os.makedirs("semanal", exist_ok=True)

    ## Encuentra el viernes de la semana que contiene la fecha de inicio
    current_date = start_date
    while current_date.weekday()!= 4:  ## 4 representa el viernes
        current_date += datetime.timedelta(days=1)

    ## Resto del código...

El código utiliza un bucle while para iterar a través de los días comenzando desde la fecha de inicio hasta que la fecha actual sea un viernes (día de la semana 4). Esto asegura que la variable current_date se establezca en el viernes de la semana que contiene la fecha de inicio.

Escribir los archivos de modelo de informe semanal

En este paso, aprenderás a escribir los archivos de modelo de informe semanal en la carpeta "semanal".

  1. En la función create, agregue el siguiente código después de encontrar el viernes de la semana de la fecha de inicio:
def create(start_date, end_date):
    ## Crea la carpeta "semanal"
    os.makedirs("semanal", exist_ok=True)

    ## Encuentra el viernes de la semana que contiene la fecha de inicio
    current_date = start_date
    while current_date.weekday()!= 4:  ## 4 representa el viernes
        current_date += datetime.timedelta(days=1)

    ## Recorre el rango de fechas comenzando desde el viernes de la semana de la fecha de inicio
    while current_date <= end_date:
        ## Construye el nombre del archivo
        file_name = current_date.strftime("%Y-%m-%d") + ".txt"
        file_path = os.path.join("semanal", file_name)

        ## Escribe el contenido del archivo
        with open(file_path, "w") as file:
            ## Escribe el rango de días hábiles desde la fecha de inicio hasta el viernes actual (excluyendo los fines de semana)
            date = max(
                start_date, current_date - datetime.timedelta(days=6)
            )  ## Asegura que la fecha de inicio no sea anterior a una semana antes del viernes actual

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

        ## Actualiza el viernes actual al siguiente viernes
        current_date += datetime.timedelta(days=7)

    ## Resto del código...

El código utiliza un bucle while para recorrer el rango de fechas comenzando desde el viernes de la semana de la fecha de inicio hasta la fecha de finalización. Para cada viernes, crea un archivo de modelo de informe semanal en la carpeta "semanal" con la fecha del viernes como nombre de archivo.

Dentro de cada archivo, el código escribe el rango de días hábiles desde la fecha de inicio (o una semana antes del viernes actual, lo que sea más reciente) hasta el viernes actual, excluyendo los fines de semana.

Ajustar la fecha de finalización al viernes anterior si es necesario

En este paso, aprenderás a ajustar la fecha de finalización al viernes anterior si cae un sábado o domingo.

  1. En la función create, agregue el siguiente código después del bucle que escribe los archivos de modelo de informe semanal:
def create(start_date, end_date):
    ## Crea la carpeta "semanal"
    os.makedirs("semanal", exist_ok=True)

    ## Encuentra el viernes de la semana que contiene la fecha de inicio
    #... (pasos anteriores)

    ## Recorre el rango de fechas comenzando desde el viernes de la semana de la fecha de inicio
    #... (paso anterior)

    ## Ajusta la fecha de finalización al viernes anterior si cae un sábado o domingo
    if end_date.weekday() == 5:  ## 5 representa sábado
        end_date -= datetime.timedelta(days=1)
    elif end_date.weekday() == 6:  ## 6 representa domingo
        end_date -= datetime.timedelta(days=2)

    ## Resto del código...

El código verifica si la fecha de finalización cae un sábado (día de la semana 5) o domingo (día de la semana 6). Si es así, ajusta la fecha de finalización al viernes anterior restando 1 o 2 días, respectivamente.

Esto asegura que el modelo de informe semanal para la última semana solo incluya los días hábiles de lunes a la fecha de finalización ajustada, excluyendo los fines de semana.

Crear el archivo de modelo de informe semanal final

En este paso, aprenderás a crear el archivo de modelo de informe semanal para la última semana, comenzando desde el lunes de la semana que contiene la fecha de finalización ajustada.

  1. En la función create, agregue el siguiente código después de ajustar la fecha de finalización:
def create(start_date, end_date):
    ## Crea la carpeta "semanal"
    os.makedirs("semanal", exist_ok=True)

    ## Encuentra el viernes de la semana que contiene la fecha de inicio
    #... (pasos anteriores)

    ## Recorre el rango de fechas comenzando desde el viernes de la semana de la fecha de inicio
    #... (pasos anteriores)

    ## Ajusta la fecha de finalización al viernes anterior si cae un sábado o domingo
    #... (paso anterior)

    ## Crea una presentación para la semana de lunes a la fecha de finalización ajustada
    ## Encuentra el lunes de la semana que contiene la fecha de finalización ajustada
    current_date = end_date

    ## Construye el nombre del archivo
    file_name = current_date.strftime("%Y-%m-%d") + ".txt"
    file_path = os.path.join("semanal", file_name)

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

    ## Escribe el contenido del archivo
    with open(file_path, "w") as file:
        ## Escribe el rango de días hábiles de lunes a la fecha de finalización ajustada (excluyendo los fines de semana)
        date = current_date
        while date <= end_date:
            if date.weekday() < 5:  ## 0 representa lunes, 4 representa viernes
                file.write(date.strftime("%Y-%m-%d") + "\n")
            date += datetime.timedelta(days=1)

El código primero encuentra el lunes de la semana que contiene la fecha de finalización ajustada. Luego construye el nombre del archivo para el modelo de informe semanal final y abre el archivo para escritura.

Dentro del archivo, el código escribe el rango de días hábiles de lunes a la fecha de finalización ajustada, excluyendo los fines de semana.

Esto asegura que el archivo de modelo de informe semanal final solo incluya los días hábiles del lunes de la semana que contiene la fecha de finalización ajustada hasta la fecha de finalización ajustada misma.

Con los pasos anteriores, has completado la implementación de la función create en el archivo report.py, que genera los modelos de informe semanal basados en las fechas de inicio y finalización proporcionadas.

  1. Para generar los modelos de informe semanal, ejecuta el script report.py con el comando python report.py en tu terminal. El script creará los modelos de informe semanal basados en las fechas de inicio y finalización proporcionadas.

A continuación se proporcionan algunos ejemplos:

## ejemplo 1

## start_date = datetime.date(2023,10,1)      Domingo
## end_date = datetime.date(2023,10,16)       Lunes
$ ls semanal
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

## ejemplo 2

## start_date = datetime.date(2023,9,10)     Domingo
## end_date = datetime.date(2023,9,24)       Domingo
$ ls semanal
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
✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.