Python 在 2016 年的 3.6 版本引入了一种称为 f-string 的字符串格式化方法,它代表格式化字符串字面值。多年过去了,f-string 也成为了python 中应用最广泛的字符串格式化方法。
1.格式化数字
你可以数字进行各种格式化/转换。下面是一些示例:
- 设置小数位数(精度):使用==:.nf==,其中n是小数位数
- 十六进制转换
- 二进制转换
- 八进制转换
- 科学计数法
- 使用前导零填充数字:使用==:0n==,其中n是总字符数
number = 420
# decimal places
# 设置精度
print(f"number: {number:.2f}")
# hex conversion
# 十六进制转换
print(f"hex: {number:#0x}")
# binary conversion
# 二进制转换
print(f"binary: {number:b}")
# octal conversion
# 八进制转换
print(f"octal: {number:o}")
# scientific notation
# 科学计数法
print(f"scientific: {number:e}")
# total number of characters
# 填充前导0
print(f"Number: {number:09}")
number: 420.00
hex: 0x1a4
binary: 110100100
octal: 644
scientific: 4.200000e+02
Number: 000000420
那么对于大数字和百分比呢?
假设你有一个像苹果市值那样大的数字,你可以使用==:,,这里的逗号,==就是分隔符。
或者,你想让 f-string 打印出一个百分比值,你可以使用 :.2% 告诉 Python 设置 2 位小数并在字符串末尾添加一个百分号。
apple_marketcap = 2.626 * 10e12
print(f"{apple_marketcap:,}") # comma separator
percentage = 10.394394
print(f"{percentage:.2%}") # percentage
26,260,000,000,000.0
1039.44%
2.日期格式化
现在,如果你想格式化日期应该怎么做呢?让我们创建一个示例日期时间值。
就像你在你的应用程序中格式化日期一样,你可以在 f-string 中定义你想要的格式,例如 :<date_format>
下面我们将一个 UTC 日期时间格式化为:
- 没有微秒
- 仅日期
- 仅时间
- 带上午/下午的时间
- 24 小时格式
import datetime
today = datetime.datetime.utcnow()
print(f"datetime : {today}\n")
print(f"date time: {today:%m/%d/%Y %H:%M:%S}") # 没有微秒
print(f"date: {today:%m/%d/%Y}") # 仅日期
print(f"time: {today:%H:%M:%S.%f}") # 仅时间
print(f"time: {today:%H:%M:%S %p}") # 时间带上上午/下午
print(f"time: {today:%H:%M}") # 24小时制时间
datetime : 2024-02-29 03:42:27.293085
date time: 02/29/2024 03:42:27
date: 02/29/2024
time: 03:42:27.293085
time: 03:42:27 AM
time: 03:42
你还可以使用格式化选项做更多事情。
下面是如何从日期中获取星期几和一年中的第几天。
你还可以做一些有趣的事情,比如计算我们已经过了一年的多少天。
已经过去了 70%,时间过得真快!
import datetime
today = datetime.datetime.utcnow()
# Locale’s appropriate date and time representation
print(f"locale appropriate: {today:%c}")
# weekday
print(f"weekday: {today:%A}") # 获取当前日期是星期几
# day of the year
print(f"day of year: {today:%j}") # 获取当前日期是一年中的第几天
# how far are we into the year?
day_of_year = f"{today:%j}" # 获取本年度已过去时间(百分比)
print(f"progress % year: {int(day_of_year) / 365 * 100:.2f}%")
locale appropriate: Thu Feb 29 04:06:56 2024
weekday: Thursday
day of year: 060
progress % year: 16.44%
3.字符串对齐
print("{:<16} {:<20}".format("IP Address", "MAC Address"))
print("{:<16} {:<20}".format("192.168.1.1", "00:11:22:33:44:55"))
在Python字符串格式化中,"{:<16} {:<20}"
是用于控制输出对齐和宽度的格式说明符,具体含义如下:
- 符号定义
<
:左对齐符号- 数字:字段总宽度(单位:字符)
- 空格填充:不足宽度时自动填充空格
- 具体解释
{:<16}
:左对齐字段,总占16字符宽度
示例: 若输出"192.168.1.1"
(11字符),右侧补5个空格{:<20}
:左对齐字段,总占20字符宽度
示例: 若输出"00:11:22:33:44:55"
(17字符),右侧补3个空格
在Python中实现右对齐可通过多种方法实现,以下是具体操作方式及示例:
text = "Python"
right_aligned = text.rjust(10) # 默认填充空格
print(repr(right_aligned)) # 输出:' Python'
自定义填充字符:
text = "Hello"
right_aligned = text.rjust(10, '*')
print(right_aligned) # 输出:*****Hello
str.format()
格式化
text = "Python"
print("{:>10}".format(text)) # 输出:' Python'
动态指定宽度:
width = 15
print("{:>{width}}".format(text, width=width)) # 输出:' Python'
使用f-string
(Python 3.6+)
text = "Python"
width = 12
print(f"{text:>{width}}") # 输出:' Python'
带填充符号:
print(f"{text:*>10}") # 输出:****Python
传统%
格式化符
number = 123
print("%10d" % number) # 输出:' 123'