【问题标题】:Pythonic formatting from 1 to 01 [duplicate]从 1 到 01 的 Pythonic 格式
【发布时间】:2015-01-07 02:17:47
【问题描述】:

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

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

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

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

【问题讨论】:

  • 给你:python -c 'print("%02d" % 1)'
  • "日期时间格式" - 为什么不 format 你的日期时间对象(%d%m 表示日/月)
  • 一般来说:format(num, '02d')str(num).zfill(2),但对于 datetime 对象还有更好的方法。你这里有datetime 对象吗?
  • @PauloScardine - 它还没有被正式弃用,但不鼓励使用它以支持str.format。如果它最终从语言中删除,我不会感到惊讶(也许是 Python 4?)。新代码应使用str.format

标签: python


【解决方案1】:
>>> ["{:02}".format(num) for num in (1,22,333)]
['01', '22', '333']

有关format 方法理解的语法的更多信息,请参阅https://docs.python.org/2/library/string.html#formatspec

【讨论】:

  • 不要使用str.format(),而使用简单的format()。无需解析 {...} 占位符并以这种方式映射到参数。 format(num, '02')format(num, '02d').
  • @MartijnPieters TMTOWTDI.
  • @MartijnPieters 不那么轻率,不可避免地,OP 会希望将多个值格式化为同一个字符串,因此最好教授更容易概括的语法。
  • 当然可以,但是要明确地这样做并谈谈不同之处。
【解决方案2】:

调用字符串格式函数比调用慢几倍

>>> "%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】:

    您可以使用字符串方法zfill 将带有零的字符串填充到指定的宽度。指定宽度为 2:

    >>> '1'.zfill(2)
    '01'
    

    超过一个字符的字符串不会被触及:

    >>> '31'.zfill(2)
    '31'
    

    【讨论】:

      【解决方案4】:

      回答您的直接问题 -

      你可以像这样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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        • 2020-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        相关资源
        最近更新 更多