Date and string format in python

Posted by chunyang on January 26, 2022
TAGS: #python

在 Python 中生成字符串有 3 种方式,现在比较建议的是使用 f-str 的方式,官方说性能更加好。本文主要 介绍在格式化时有哪些格式可以选择。

String

%

a = 42
b = "%d" % a

c = "answer to everything"
d = "%s %s" % (b, c)

format

a = "{} {}"
b = 1
c = 2
d = a.format(b, c)

a = "{bb} {cc}"
d = a.format(bb=b, cc=c)

person = {"first": "zhang", "last": "san"}
d = "{p[first]}-{p[last]}".format(p=person)

a = "{1} {0}"
d = a.format(b, c)  # 交换位置

f-str

基本上所有的 format 支持得做法 f-str 都是支持的。这里展开介绍下具体的格式。

进制转化

a = 13
print(f"{a:o}")
print(f"{a:b}")
print(f"{a:x}")
print(f"{a:d}")

b = 88.3998128733

print(f"{b:.4f}")
print(f"{b:.4e}")  # 科学技术法

对齐

a = 13

print(f"{a:04}")   # 默认填充左边

# 自定义填充字符
print(f"{a:_>04}") # 填充左边
print(f"{a:_<04}") # 填充右边
print(f"{a:_^04}") # 填充左右

benchmark

python -m timeit "a=1;b=f'{a}'"
# 2000000 loops, best of 5: 102 nsec per loop

python -m timeit "a=1;b='{a}'.format(a=a)"
# 1000000 loops, best of 5: 336 nsec per loop

可以看出 f-strformat 的性能还是高不少。

time format

from datetime import datetime as dt

now = dt.now()

format = "%Y-%m-%d %H:%M:%S %a"

print(now.strftime(format))
Code Example Description  
%a Sun Weekday as locale’s abbreviated name.  
%A Sunday Weekday as locale’s full name.  
%w 0 Weekday as a decimal number, where 0 is Sunday and 6 is Saturday.  
%d 08 Day of the month as a zero-padded decimal number.  
%- 8 Day of the month as a decimal number. (Platform specific)  
%b Sep Month as locale’s abbreviated name.  
%B September Month as locale’s full name.  
%m 09 Month as a zero-padded decimal number.  
%- 9 Month as a decimal number. (Platform specific)  
%y 13 Year without century as a zero-padded decimal number.  
%Y 2013 Year with century as a decimal number.  
%H 07 Hour (24-hour clock) as a zero-padded decimal number.  
%-H 7 Hour (24-hour clock) as a decimal number. (Platform specific)  
%I 07 Hour (12-hour clock) as a zero-padded decimal number.  
%-   7 Hour (12-hour clock) as a decimal number. (Platform specific)
%p AM Locale’s equivalent of either AM or PM.  
%M 06 Minute as a zero-padded decimal number.  
%-M 6 Minute as a decimal number. (Platform specific)  
%S 05 Second as a zero-padded decimal number.  
%-S 5 Second as a decimal number. (Platform specific)  
%f 000000 Microsecond as a decimal number, zero-padded on the left.  
%z +0000 UTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive).  
%Z UTC Time zone name (empty string if the object is naive).  
%j 251 Day of the year as a zero-padded decimal number.  
%-j 251 Day of the year as a decimal number. (Platform specific)  
%U 36 Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0.  
%W 35 Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0.  
%c Sun Sep 8 07:06:05 2013 Locale’s appropriate date and time representation.    
%x 09/08/13 Locale’s appropriate date representation.  
%X 07:06:05 Locale’s appropriate time representation.  
%% % A literal ‘%’ character.  

Reference