주간 보고서 템플릿 생성

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 새로운 프로젝트 팀을 위한 주간 보고서 템플릿을 만드는 방법을 배우게 됩니다. 주간 보고서는 정기적인 검토를 위해 프로젝트 팀의 일일 작업을 요약하는 데 사용됩니다.

👀 미리보기

## 예시

## start_date = datetime.date(2023,10,1)      일요일
## end_date = datetime.date(2023,10,16)       월요일
$ 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 폴더 생성

이 단계에서는 주간 보고서 템플릿 파일을 저장하기 위해 "weekly" 폴더를 만드는 방법을 배우게 됩니다.

  1. 코드 편집기에서 report.py 파일을 엽니다.
  2. 코드에서 create 함수를 찾습니다.
  3. create 함수 내에서 다음 코드를 추가하여 "weekly" 폴더를 생성합니다:
import os

def create(start_date, end_date):
    ## "weekly" 폴더 생성
    os.makedirs("weekly", exist_ok=True)

    ## 나머지 코드...

os.makedirs("weekly", exist_ok=True) 줄은 report.py 파일과 동일한 디렉토리에 "weekly" 폴더를 생성합니다. exist_ok=True 매개변수는 폴더가 이미 존재하더라도 폴더가 생성되도록 하여 오류를 방지합니다.

✨ 솔루션 확인 및 연습

시작 날짜 주간 금요일 결정

이 단계에서는 시작 날짜가 포함된 주의 금요일을 찾는 방법을 배우게 됩니다.

  1. create 함수에서 폴더 생성 후 다음 코드를 추가합니다:
import datetime

def create(start_date, end_date):
    ## "weekly" 폴더 생성
    os.makedirs("weekly", exist_ok=True)

    ## 시작 날짜가 포함된 주의 금요일 찾기
    current_date = start_date
    while current_date.weekday() != 4:  ## 4 는 금요일을 나타냅니다
        current_date += datetime.timedelta(days=1)

    ## 나머지 코드...

이 코드는 while 루프를 사용하여 시작 날짜부터 시작하여 현재 날짜가 금요일 (요일 4) 이 될 때까지 날짜를 반복합니다. 이렇게 하면 current_date 변수가 시작 날짜가 포함된 주의 금요일로 설정됩니다.

✨ 솔루션 확인 및 연습

주간 보고서 템플릿 파일 작성

이 단계에서는 "weekly" 폴더에 주간 보고서 템플릿 파일을 작성하는 방법을 배우게 됩니다.

  1. create 함수에서 시작 날짜의 주 금요일을 찾은 후 다음 코드를 추가합니다:
def create(start_date, end_date):
    ## "weekly" 폴더 생성
    os.makedirs("weekly", exist_ok=True)

    ## 시작 날짜가 포함된 주의 금요일 찾기
    current_date = start_date
    while current_date.weekday() != 4:  ## 4 는 금요일을 나타냅니다
        current_date += datetime.timedelta(days=1)

    ## 시작 날짜의 주 금요일부터 날짜 범위를 순회합니다
    while current_date <= end_date:
        ## 파일 이름 구성
        file_name = current_date.strftime("%Y-%m-%d") + ".txt"
        file_path = os.path.join("weekly", file_name)

        ## 파일 내용 작성
        with open(file_path, "w") as file:
            ## 시작 날짜부터 현재 금요일까지의 평일 범위 작성 (주말 제외)
            date = max(
                start_date, current_date - datetime.timedelta(days=6)
            )  ## 시작 날짜가 현재 금요일의 일주일 전보다 빠르지 않도록 합니다

            while date <= current_date:
                if date.weekday() < 5:  ## 0 은 월요일, 4 는 금요일을 나타냅니다
                    file.write(date.strftime("%Y-%m-%d") + "\n")
                date += datetime.timedelta(days=1)

        ## 현재 금요일을 다음 금요일로 업데이트합니다
        current_date += datetime.timedelta(days=7)

    ## 나머지 코드...

이 코드는 while 루프를 사용하여 시작 날짜의 주 금요일부터 종료 날짜까지의 날짜 범위를 순회합니다. 각 금요일에 대해 "weekly" 폴더에 금요일 날짜를 파일 이름으로 하는 주간 보고서 템플릿 파일을 생성합니다.

각 파일 내에서 코드는 시작 날짜 (또는 현재 금요일의 일주일 전 중 더 늦은 날짜) 부터 현재 금요일까지의 평일 범위를 주말을 제외하고 작성합니다.

✨ 솔루션 확인 및 연습

필요시 종료일을 이전 금요일로 조정

이 단계에서는 종료 날짜가 토요일 또는 일요일에 해당하는 경우 이전 금요일로 조정하는 방법을 배우게 됩니다.

  1. create 함수에서 주간 보고서 템플릿 파일을 작성하는 루프 뒤에 다음 코드를 추가합니다:
def create(start_date, end_date):
    ## "weekly" 폴더 생성
    os.makedirs("weekly", exist_ok=True)

    ## 시작 날짜가 포함된 주의 금요일 찾기
    ## ... (이전 단계)

    ## 시작 날짜의 주 금요일부터 날짜 범위를 순회합니다
    ## ... (이전 단계)

    ## 종료 날짜가 토요일 또는 일요일에 해당하는 경우 이전 금요일로 조정합니다
    if end_date.weekday() == 5:  ## 5 는 토요일을 나타냅니다
        end_date -= datetime.timedelta(days=1)
    elif end_date.weekday() == 6:  ## 6 은 일요일을 나타냅니다
        end_date -= datetime.timedelta(days=2)

    ## 나머지 코드...

이 코드는 종료 날짜가 토요일 (요일 5) 또는 일요일 (요일 6) 에 해당하는지 확인합니다. 그렇다면, 각각 1 일 또는 2 일을 빼서 종료 날짜를 이전 금요일로 조정합니다.

이렇게 하면 마지막 주의 주간 보고서 템플릿이 월요일부터 조정된 종료 날짜까지의 평일만 포함하고 주말은 제외됩니다.

✨ 솔루션 확인 및 연습

최종 주간 보고서 템플릿 파일 생성

이 단계에서는 조정된 종료 날짜가 포함된 주의 월요일부터 시작하여 최종 주간 보고서 템플릿 파일을 생성하는 방법을 배우게 됩니다.

  1. create 함수에서 종료 날짜를 조정한 후 다음 코드를 추가합니다:
def create(start_date, end_date):
    ## "weekly" 폴더 생성
    os.makedirs("weekly", exist_ok=True)

    ## 시작 날짜가 포함된 주의 금요일 찾기
    ## ... (이전 단계)

    ## 시작 날짜의 주 금요일부터 날짜 범위를 순회합니다
    ## ... (이전 단계)

    ## 종료 날짜가 토요일 또는 일요일에 해당하는 경우 이전 금요일로 조정합니다
    ## ... (이전 단계)

    ## 월요일부터 조정된 종료 날짜까지의 주에 대한 제출물 생성
    ## 조정된 종료 날짜가 포함된 주의 월요일 찾기
    current_date = end_date

    ## 파일 이름 구성
    file_name = current_date.strftime("%Y-%m-%d") + ".txt"
    file_path = os.path.join("weekly", file_name)

    while current_date.weekday() != 0:  ## 0 은 월요일을 나타냅니다
        current_date -= datetime.timedelta(days=1)

    ## 파일 내용 쓰기
    with open(file_path, "w") as file:
        ## 월요일부터 조정된 종료 날짜까지의 평일 범위 쓰기 (주말 제외)
        date = current_date
        while date <= end_date:
            if date.weekday() < 5:  ## 0 은 월요일, 4 는 금요일을 나타냅니다
                file.write(date.strftime("%Y-%m-%d") + "\n")
            date += datetime.timedelta(days=1)

이 코드는 먼저 조정된 종료 날짜가 포함된 주의 월요일을 찾습니다. 그런 다음 최종 주간 보고서 템플릿의 파일 이름을 구성하고 쓰기 모드로 파일을 엽니다.

파일 내부에서 코드는 월요일부터 조정된 종료 날짜까지의 평일 범위를 주말을 제외하고 작성합니다.

이렇게 하면 최종 주간 보고서 템플릿 파일이 조정된 종료 날짜가 포함된 주의 월요일부터 조정된 종료 날짜 자체까지의 평일만 포함하도록 보장합니다.

위의 단계를 통해 제공된 시작 및 종료 날짜를 기반으로 주간 보고서 템플릿을 생성하는 report.py 파일의 create 함수 구현을 완료했습니다.

  1. 주간 보고서 템플릿을 생성하려면 터미널에서 python report.py 명령으로 report.py 스크립트를 실행합니다. 스크립트는 제공된 시작 및 종료 날짜를 기반으로 주간 보고서 템플릿을 생성합니다.

몇 가지 예가 아래에 제공됩니다:

## 예시 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

## 예시 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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.