10}') 返回 aaa 即它有填充。 如果我现在这样做: tod-6ren">
gpt4 book ai didi

python - 如何格式化日期并用空格填充它?

转载 作者:行者123 更新时间:2023-12-05 02:28:25 25 4
gpt4 key购买 nike

如果您正在设置格式的对象是日期,则格式设置似乎会有所不同。

today = "aaa"
print(f'{today:>10}')

返回

       aaa

即它有填充。

如果我现在这样做:

today = datetime.date.today()
print(f'{today:>10}')

那么响应是

>10

这显然不是我想要的。我已经尝试了各种其他组合,我也在其中输入了日期格式,但它所做的只是画出日期,然后还添加“>10”。

如何使用填充格式化日期?

最佳答案

Python 通过 f 字符串格式化的方案(以及字符串的 .format 方法)允许插入的数据使用 __format__ 魔法来覆盖格式规范的工作方式方法:

>>> class Example:
... def __format__(self, template):
... return f'{template} formatting of {self.__class__.__name__} instance'
...
>>> f'{Example():test}'
'test formatting of Example instance'

datetime.date 这样做,因此 time.strftime 用于格式化(经过一些操作,例如为日期插入代理时间,反之亦然):

>>> help(today.__format__)
Help on built-in function __format__:

__format__(...) method of datetime.date instance
Formats self with strftime.

这意味着可以使用 %Y 等代码,但支持字段宽度说明符(如 >10)。格式字符串 >10 不包含日期(或时间)的任何组成部分的任何占位符,因此您只需返回文字 >10

幸运的是,解决这个问题很简单。只需将日期强制转换为字符串,然后填充字符串:

>>> f'{str(today):>20}'
' 2022-06-13'

或者更好的是,使用内置语法进行此类强制转换:

>>> f'{today!s:>20}' # !s for str(), !r for repr()
' 2022-06-13'

如果您也想使用 strftime 格式化,请分两步进行格式化:

>>> formatted = f'{today:%B %d, %Y}'
>>> f'{formatted:>20}'
' June 13, 2022'

请注意,嵌套格式说明符不会起作用:

>>> # the {{ is interpreted as an escaped literal {
>>> f'{{today:%B %d, %Y}:>20}'
File "<stdin>", line 1
SyntaxError: f-string: single '}' is not allowed
>>> # the inner {} looks like a dict, but %B isn't an identifier
>>> f'{ {today:%B %d, %Y}:>20}'
File "<fstring>", line 1
( {today:%B %d, %Y})
^
SyntaxError: invalid syntax

然而,f-strings 本身可以嵌套(这显然不是很优雅,也不会很好地扩展):

>>> # instead of trying to format the result from another placeholder,
>>> # we reformat an entire separately-formatted string:
>>> f'{f"{today:%B %d, %Y}":>20}'
' June 13, 2022'

关于python - 如何格式化日期并用空格填充它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72609159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com