1. はじめに
Pythonで日付や時刻を扱う際、「今が何週目か(週番号)」を知りたいケースは多くあります。たとえば、業務報告書を週単位で出力したり、売上データを週ごとにグルーピングしたりと、実務や分析において週番号は意外と重要な役割を持ちます。
そんなときに便利なのが、datetime.date
オブジェクトの isocalendar()
メソッドです。このメソッドを使えば、現在の日付からISO準拠の週番号(ISO週)を簡単に取得できます。
この記事では、Pythonで現在の週番号(ISO週)を取得する方法を、コード付きでわかりやすく解説します。初心者〜中級者向けに、使い方・応用・注意点まで丁寧に紹介しますので、ぜひ最後までご覧ください。
2. Pythonで週番号を取得する基本:isocalendar()の使い方
2-1. isocalendar()とは?
isocalendar()
は、datetime.date
または datetime.datetime
オブジェクトに対して使えるメソッドです。返されるのは、次の3つの情報です:
- ISO年(年)
- ISO週番号(その年の何週目か)
- ISO曜日番号(月曜=1〜日曜=7)
2-2. 現在の週番号を取得するコード例
まずは基本的なコードで、現在の週番号を取得してみましょう。
import datetime
# 今日の日付を取得
today = datetime.date.today()
# isocalendarでISOカレンダー情報を取得
iso_year, iso_week, iso_weekday = today.isocalendar()
# 結果を出力
print(f"ISO年: {iso_year}, ISO週番号: {iso_week}, ISO曜日: {iso_weekday}")
実行結果:
ISO年: 2025, ISO週番号: 30, ISO曜日: 3
この例では、2025年の第30週、水曜日(3)であることを示しています。週の始まりは月曜日(1)で、日曜日が7になります。
2-3. datetime.datetimeでも使える
datetime.date
だけでなく、datetime.datetime
型でも isocalendar()
は使用可能です。
import datetime
# 現在の日時を取得
now = datetime.datetime.now()
# isocalendarを適用
iso_info = now.isocalendar()
print(f"年: {iso_info.year}, 週: {iso_info.week}, 曜日: {iso_info.weekday}")
実行結果:
年: 2025, 週: 30, 曜日: 3
このように、現在の「日時」からも週番号を取得できます。
3. よくある使い方・応用例
3-1. 週単位でログファイルを管理する
週ごとにログを分けたいときには、ファイル名やフォルダ名に週番号を組み込むと便利です。
import datetime
today = datetime.date.today()
iso_year, iso_week, _ = today.isocalendar()
# ファイル名に週情報を含める
log_file = f"log_{iso_year}_week{iso_week}.txt"
print(f"出力ファイル名:{log_file}")
実行結果:
出力ファイル名:log_2025_week30.txt
3-2. 週の始まり(月曜)と終わり(日曜)を取得する
ある日が含まれる週の範囲(月〜日)を知りたい場合には、weekday()
を使って範囲を計算できます。
import datetime
def get_week_range(date_obj):
weekday = date_obj.weekday() # 月曜=0, 日曜=6
monday = date_obj - datetime.timedelta(days=weekday)
sunday = monday + datetime.timedelta(days=6)
return monday, sunday
today = datetime.date.today()
start, end = get_week_range(today)
print(f"週の始まり: {start}, 終わり: {end}")
実行結果:
週の始まり: 2025-07-21, 終わり: 2025-07-27
3-3. 年週キーでデータをグループ化
売上データやアクセスログを「年-週」でグルーピングするケースもあります。
def get_week_key(date_obj):
year, week, _ = date_obj.isocalendar()
return f"{year}-W{week:02}"
sample_date = datetime.date(2025, 7, 23)
print(get_week_key(sample_date))
実行結果:
2025-W30
このように、週単位でキーを作ることで、週ごとのデータ集計や比較がしやすくなります。
4. 注意点・エラー対策
4-1. 文字列にはisocalendar()は使えない
以下のように、str
型に直接 isocalendar()
を使うとエラーになります。
# エラーになる例
date_str = "2025-07-23"
# print(date_str.isocalendar()) # AttributeError
正しくは、datetime.date
に変換してから使用します:
import datetime
date_str = "2025-07-23"
date_obj = datetime.date.fromisoformat(date_str)
print(date_obj.isocalendar())
実行結果:
datetime.IsoCalendarDate(year=2025, week=30, weekday=3)
4-2. 年末年始の週番号に注意
12月31日や1月1日は、翌年や前年の週としてカウントされる場合があります。
import datetime
date1 = datetime.date(2020, 12, 31)
date2 = datetime.date(2021, 1, 1)
print(date1.isocalendar())
print(date2.isocalendar())
実行結果:
datetime.IsoCalendarDate(year=2020, week=53, weekday=4)
datetime.IsoCalendarDate(year=2020, week=53, weekday=5)
このように、1月1日でも「前年の週番号」に含まれることがあるので注意しましょう。
5. まとめ
本記事では、Pythonで現在の週番号(ISO週)を取得する方法について、isocalendar()
の使い方を中心に解説しました。
isocalendar()
はISO年・週・曜日を返す便利なメソッド- 週単位のファイル管理やデータ分析に実務で活用できる
- 文字列には使えない、年末年始の週番号の扱いに注意が必要
学習のコツとしては、まず「実際の日付をいくつか試してみる」ことがおすすめです。2024年末や2025年初頭などを使って、週番号の挙動を体感することで、理解が深まります。
週単位の処理は、意外と業務の中で頻繁に登場します。isocalendar() はその基本を支える非常に実用的なメソッドです。ぜひ自分のプロジェクトでも活用してみてください。