メモの日々


2023年01月01日(日) [長年日記]

[python] システムのローカルタイムゾーンを持つdatetimeオブジェクトを得る

Pythonでシステムローカルのタイムゾーンを持つdatetimeオブジェクトを得るには、astimezone()メソッドを使う。

引数無し (もしくは tz=None の形 ) で呼び出された場合、システムのローカルなタイムゾーンが変更先のタイムゾーンだと仮定されます。 変換後の datetime インスタンスの .tzinfo 属性には、 OS から取得したゾーン名とオフセットを持つ timezone インスタンスが設定されます。

>>> import datetime
>>> datetime.datetime(2023, 1, 1).isoformat()
'2023-01-01T00:00:00'
>>> datetime.datetime(2023, 1, 1).astimezone().isoformat()
'2023-01-01T00:00:00+09:00'

[python] コマンドラインでのJSONの整形にPythonを使う

以前にPowerShellを使ったJSONの整形をメモしたが、Pythonが使えるならより柔軟に整形できる。

PythonにはコマンドラインでのJSONの整形用にjson.toolモジュールが用意されているのでこれを使う。

$ echo '{"a": 1, "b1": {"b2": {"b3": {"b4": 2}}}, "c": ["hello", "world"]}' | python -m json.tool
{
    "a": 1,
    "b1": {
        "b2": {
            "b3": {
                "b4": 2
            }
        }
    },
    "c": [
        "hello",
        "world"
    ]
}

オプションもいくつか用意されていて助かる。

[python] Pythonの代入式

Python 3.8から、代入した結果を返してくれる代入式が使えることを知った。

>>> print(a := 1)
1

内包表記でも使えて便利。

>>> d = { "hello": "world" }
>>> a = [ "hello", "apple", "pen" ]
>>> [v for x in a if (v := d.get(x)) is not None]
['world']