スクリプトのお勉強

(小ネタ) 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

-スクリプトのお勉強

執筆者:

関連記事

小ネタ: Python のdataclass でNone or “”を使わないJSONデータを定義する

PythonをREST APIのクライアントとして作成する際、dataclassesを使用しようと思いました。型が見た瞬間分かるし、しっかりしているからです。 でも、そのREST API は&#822 …

unconstant – perlライブラリ

ちょっとだけperlの機能修正をしたので、そのときに使用したライブラリについて書こうと思います。 perlのunconstant です。 use constantの解除 use constantとは固 …

ワンライナーから使いそうなのを抜粋

ワンライナー多すぎ、、 https://linuxcommandlibrary.com/basic/oneliners は膨大なワンライナーがあっていいのですが、多すぎて、何が使えるかぱっと見分かりま …

Markdown to HTML(grip)

1.はじめに 最近の文書はほとんどMarkdownで書くのですが、それをHTMLに変換する方法を調べました。 ただし、私がMarkdownと思っている文法は「github-flavored-markd …

Python3 – VCR.py でネットワーク系テストを簡単に作成する

1. 始めに python3で実装すると、モックテストをしたくなります。モックを使って、比較的簡単にテストできるからです。 問題はネットワーク系テスト モックテストで問題になるのは、外部に依存するテス …

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