スクリプトのお勉強

(小ネタ) python3 date_range + step付き

投稿日:

ちょっと前に同じような感じのネタを。。

したような気がするのだが、まぉおいておこう。。

素のPython3で、日付にてfor文を回す方法

日付で分割して処理をしたいと思うときがあります。
例えば、2022/04/23から、2022/06/1までの日付を3日毎に、処理したいとかが考えられます。

思ったより面倒で、なんとなくdateutilでやりたくなりますが、ライブラリを導入できないとします。

date_range関数

で、いろいろを参考に書いてみたのが以下です。

from datetime import date, timedelta


def date_range(start, stop, step = timedelta(1)):
    current = start
    while current <= stop:
        yield current
        current += step

    if current < stop + step:
        yield stop

# 呼び出しサンプル
print("timedelta=3");

start_date = date(2021,12,21)
end_date = date(2022,3,2)

for i, dt in enumerate(date_range(start_date, end_date, timedelta(3)):
    print(dt.strftime("%Y-%m-%d"))

動作結果は以下になります。

timedelta=3
2021-12-21
2021-12-24
2021-12-27
2021-12-30
2022-01-02
2022-01-05
2022-01-08
2022-01-11
2022-01-14
2022-01-17
2022-01-20
2022-01-23
2022-01-26
2022-01-29
2022-02-01
2022-02-04
2022-02-07
2022-02-10
2022-02-13
2022-02-16
2022-02-19
2022-02-22
2022-02-25
2022-02-28
2022-03-02

書いておいてなんですが、よく分かってない。

いまだにyieldってよく分かってません。もちろんループでちょいちょい戻るのは分かるのですが、どこで使っていいかを判断する基準が分かってません。

まぁ動くからいいことにしよう。。

参考

https://stackoverflow.com/questions/7274267/print-all-day-dates-between-two-dates/7274316

-スクリプトのお勉強

執筆者:

関連記事

WSL2にOpenCV + Pythonをインストールする

お手軽にやろうと思ってやってみました。作業手順自体を見ると、お手軽ではないかもしれません。 環境 インストールする/した環境は以下の通りです。 WSL2Ubuntu 20.04.2 LTSPython …

MySQL MCP Serverを設定/動作確認してみる

はじめに 今はやりの生成AIとして、LLM(ローカルAPI)とMySQLのMCP Serverを使用してチャットシステムを作ろうと思います。 その前に、前回作成したDBへのMySQL MCP Serv …

CentOS7をRocky Linux 9に移行する

このVMのOSをCentOS7にした関係上、そろそろupdateする必要があります。そもそもCentOS7を選択した理由は、仕事で使用するからでした。 で、仕事ではRocky Linux 9なので、こ …

Djangoアプリサンプル – 画像ファイルアップロード + 顔モザイク(画像アップロード編)

仕事で使用している、Djangoについて、サンプルを作成してみようと思います。ここでは、画像ファイルのアップロードと顔モザイクを行うwebアプリを作成してみようと思います。 この記事ではファイルアップ …

go 1.16 でviperを使って設定ファイルを読みだすプログラムを作ってみた

他にたくさんあるけど こんな感じの内容はたくさんあると思いますが、、goの初心者がなんとなくgoの手習いとして、まずは設定ファイルを読みだすことをしてみようと思いました。 go動作環境 windows …

google オプトアウト Click here to opt-out.