Pythonic格式从1到01

时间:2014-11-10 17:34:10

标签: python

我希望能够为我的功能格式化日期/时间输入。

目前,我有一个函数,如果它只有1位数,基本上会将0加到数字上。

def format_num(str(num)):
    if len(num) < 2:
        return "0" + num
    return num

我想知道是否有更多的pythonic方式来做到这一点。

4 个答案:

答案 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