週報テンプレートの作成

PythonBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、新しいプロジェクトチーム用の週報テンプレートを作成する方法を学びます。週報は、定期的なレビューのためにプロジェクトチームの日々の作業をまとめるために使用されます。

👀 プレビュー

## 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」フォルダを作成する方法を学びます。

  1. コードエディタで report.py ファイルを開きます。
  2. コード内の create 関数を見つけます。
  3. 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) の行は、report.py ファイルと同じディレクトリに「weekly」フォルダを作成します。exist_ok=True パラメータは、フォルダが既に存在していても作成されるようにし、エラーを防ぎます。

開始日の週の金曜日を決定する

このステップでは、開始日を含む週の金曜日を見つける方法を学びます。

  1. 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 ループを使って開始日から始まる日付を 1 日ずつイテレートし、現在の日付が金曜日(曜日 4)になるまで続けます。これにより、current_date 変数が開始日を含む週の金曜日に設定されます。

週報テンプレートファイルを書き込む

このステップでは、「weekly」フォルダに週報テンプレートファイルを書き込む方法を学びます。

  1. 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 ループを使って開始日の週の金曜日から終了日までの日付範囲を traverse します。各金曜日に対して、「weekly」フォルダに金曜日の日付をファイル名として週報テンプレートファイルを作成します。

各ファイルの中で、コードは開始日(または現在の金曜日の 1 週間前、どちらが後かに応じて)から現在の金曜日までの平日の範囲を書き込み、週末は除外します。

必要に応じて終了日を前の金曜日に調整する

このステップでは、終了日が土曜日または日曜日の場合、それを前の金曜日に調整する方法を学びます。

  1. 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 する
    #... (前のステップ)

    ## 終了日が土曜日または日曜日の場合、それを前の金曜日に調整する
    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):
    ## Create the "weekly" folder
    os.makedirs("weekly", exist_ok=True)

    ## Find the Friday of the week containing the start date
    #... (前のステップ)

    ## 開始日の週の金曜日から始まる日付範囲を traverse する
    #... (前のステップ)

    ## 終了日が土曜日または日曜日の場合、それを前の金曜日に調整する
    #... (前のステップ)

    ## 調整後の終了日を含む週の月曜日からの週の提出書類を作成する
    ## 調整後の終了日を含む週の月曜日を見つける
    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

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って、技術力を向上させることができます。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習