『Google Calendarの繰り返し』の勤怠をPythonに取り込む(読み込み側改修)

こんにちは Tomoです。

今回は『Google Calendarの繰り返し』の勤怠をPythonに取り込みますの第二弾です。

今回はzipファイルを読み込む部分について書きます。

事前準備

前回の続きとなります

以下の内容を確認してください。


イベントクラスのインスタンス変数に格納する

今回はzipファイルからイベントデータを読み込んで前回作成したClassのインスタンス変数に格納します。

基本的に前回のクラスに切り出しの処理は行っているので、各要素(DTSTART)などを判定してその要素に対するメソッドを呼び出すだけとなります。

    

def read_calendar_zip():
    """
    zip形式のカレンダーを取得してlistに格納します.
    """
    with zipfile.ZipFile(CALENDAR_ZIP_FILE_PATH) as cal_zip:
        with cal_zip.open(CALENDAR_FILE_NAME) as cal_file:

            cal_eve_list = []
            event_flag = False
            for line in cal_file:
                 line_decode = line.decode('utf-8')
                 line_decode = line_decode.rstrip('\r\n')

                 # イベントの開始(BEGIN:VEVENT)を探す
                 if 'BEGIN:VEVENT' in line_decode:
                     event_flag = True
                     cd = CalendaEventClass()

                 if event_flag:
                     # 開始時間(DTSTART)を探す
                     if 'DTSTART' in line_decode:
                         cd.set_dtstart(line_decode)

                     # 終了時間(DTEND)を探す
                     if 'DTEND' in line_decode:
                         cd.set_dtend(line_decode)

                     # ルール(RRULE)を探す
                     if 'RRULE' in line_decode:
                         cd.set_rule(line_decode)

                     # 除外日(EXDATE)を探す
                     if 'EXDATE' in line_decode:
                         cd.set_exdate(line_decode)

                     # タイトル(SUMMARY)を探す
                     if 'SUMMARY:' in line_decode:
                         cd.set_summary(line_decode)

                     # イベントの終了(END:VEVENT)を探す
                     if 'END:VEVENT' in line_decode:
                         event_flag = False
                         cal_eve_list.append(cd)

            return cal_eve_list

    

ポイントは以下の通りです。

  • event_flagの追加
  • メソッドの呼び出し

event_flagの追加

繰り返しの前に『event_flag = False』を追加しています。

このフラグは、「イベントの開始」から「イベントの終了」迄の間をフラグで制御しています。

イベントフラグの下に「if event_flag:」を記載しています。「event_flag = True」の時だけ処理を行います。

この処理の解放は、イベントの終了のときに「event_flag = False」とすることで対応しています。

この処理をいれた理由としては、「BEGIN:VEVENT」の処理の前に、「DTSTART」の記述があり正しく動作しなかったため対応しました。

メソッドの呼び出し

前回作成したイベントクラスのメソッドを使用するように変えました。

呼び出しの処理がすっきりしたイメージです。

まとめ

イベントクラスに値を設定し、加工することで呼び出し側のコーディング量を少なくしています。

何か変更がある時も基本は、イベントクラスの方で対応できるため役割も明確になったと思います。

今回は以上です。

次回はExcelに出力する関数の改修について記載します。

ソースコードは上記の内容がすべてなので省略します。

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。