⬜
秒数から時間、分、秒数を綺麗に得る(Python)
こんにちは、沙代です。
だいぶ秋っぽくなってきましたね。でも、昔ってこれが夏じゃありませんでしたっけ?
tqdmのテストコードを読んでいたら、Pythonicに時間、分、秒数を得る方法があったので、備忘のためメモしておきたいと思います。
(コーダーの方感謝です)
TL;DR
mins, s = divmod(int(seconds), 60)
h, m = divmod(mins, 60)
print(f"{h:d}:{m:02d}:{s:02d}")
今まで
divmod
を知らなかったので、毎回%
,//
を使ってやっていました。
こんな感じ
h = int(seconds) // 3600
m = (int(seconds) % 3600) // 60
s = int(seconds) % 60
print(f"{h}:{m:02}:{s:02}")
コードの発見
tqdm/std.py
@staticmethod
def format_interval(t):
"""
Formats a number of seconds as a clock time, [H:]MM:SS
Parameters
----------
t : int
Number of seconds.
Returns
-------
out : str
[H:]MM:SS
"""
mins, s = divmod(int(t), 60)
h, m = divmod(mins, 60)
return f'{h:d}:{m:02d}:{s:02d}' if h else f'{m:02d}:{s:02d}'
美しいですね。
おまけ
一文字変数名は避けるのが望ましくありますが、使用を局所に絞った場合、逆に1文字の方がわかりやすいこともありますね。
JavaScriptやVimScriptにはdivmod
に該当する関数がぱっと見なさそうで、少し残念です。(作ればいいんですけどね)
Discussion