我希望能够为我的功能格式化日期/时间输入。
目前,我有一个函数,如果它只有1位数,基本上会将0加到数字上。
def format_num(str(num)):
if len(num) < 2:
return "0" + num
return num
我想知道是否有更多的pythonic方式来做到这一点。
答案 0 :(得分:6)
您可以使用字符串方法zfill
将字符串填充为指定宽度的零。指定宽度2:
>>> '1'.zfill(2)
'01'
超过一个字符的字符串不会被触及:
>>> '31'.zfill(2)
'31'
答案 1 :(得分:4)
>>> ["{:02}".format(num) for num in (1,22,333)]
['01', '22', '333']
有关format
方法理解的语法的更多信息,请参阅https://docs.python.org/2/library/string.html#formatspec。
答案 2 :(得分:3)
调用字符串格式函数比
慢几倍>>> "%02d" % 8
'08'
>>> "%02d" % 80
'80'
因此,如果您关心性能,请尝试避免函数调用。
python -m timeit "'%02d' % 8"
100000000 loops, best of 3: 0.0166 usec per loop
python -m timeit "'8'.zfill(2)"
10000000 loops, best of 3: 0.163 usec per loop
python -m timeit "'{:02}'.format(2)"
1000000 loops, best of 3: 0.385 usec per loop
在这样简单且经常调用的代码中,我会采用更快的解决方案。
答案 3 :(得分:2)
回答你的直接问题 -
您可以format这样的号码:
format(num, '02d')
示例:
nums = [1,22,333]
for num in nums:
print format(num, '02d')
输出:
01
22
333
但是,您说您正在使用日期时间。您可以直接format a datetime object
%d - Zero padded day
%m - Zero padded month