Python 的字符串格式化方法
在 Python 中,格式化字符串是一种常见的操作,用于将变量或数据嵌入到字符串中,使其更具可读性和灵活性。Python 提供了多种字符串格式化方法,包括传统的 %
格式化、str.format()
方法以及现代的 f-string(格式化字符串字面量)。以下是这些方法的详细介绍和使用示例:
1. %
格式化(旧式格式化)
%
格式化是 Python 最早的字符串格式化方法,使用 %
符号作为占位符,并通过 %
操作符将值插入到字符串中。
语法
"%格式化符" % 值
说明:字符串后直接+%值。
示例
name = "Alice"
age = 30
message = "Hello, %s! You are %d years old." % (name, age)
print(message)
# 输出:Hello, Alice! You are 30 years old.
说明:这里是将name插入到%s所在的位置,将age插入到%d所在的位置,顺序是对应的。
常见格式化符
-
%s
:字符串 -
%d
:整数 -
%f
:浮点数 -
%.2f
:保留两位小数的浮点数 -
%x
:十六进制 -
%o
:八进制
2. str.format()
方法
str.format()
是一种更灵活的格式化方法,使用 { }
作为占位符,并通过 .format()
方法将值插入到字符串中。
语法
"{} {}".format(value1, value2)
示例
name = "Alice"
age = 30
message = "Hello, {}! You are {} years old.".format(name, age)
print(message)
# 输出:Hello, Alice! You are 30 years old.
说明:这里是将name插入到第一个{ }所在的位置,将age插入到第二个{ }所在的位置,顺序是对应的,跟前面%格式化一样。
高级用法
-
指定索引:
message = "Hello, {0}! You are {1} years old. Nice to meet you, {0}.".format(name, age) print(message) # 输出:Hello, Alice! You are 30 years old. Nice to meet you, Alice.
说明:这里可以使用索引,后面括号中的变量按顺序建立索引,如name的索引为0,age的索引为1,所以在前面{ }占位符中,可以不用顺序对应后面的变量(引用的次数和位置都没有限制),而是按照索引值来读取。
-
格式化数字:
pi = 3.1415926 message = "The value of pi is {:.2f}".format(pi) print(message) # 输出:The value of pi is 3.14
说明:将pi按.2f格式输出,即保留两位小数。
-
字典格式化:
data = {"name": "Alice", "age": 30} message = "Hello, {name}! You are {age} years old.".format(**data) print(message) # 输出:Hello, Alice! You are 30 years old.
说明:data是一个字典,每一个元素包含了“字段名:字段值”,可以根据字段名读取字段值。
3. f-string(格式化字符串字面量)
f-string 是 Python 3.6 引入的一种新的字符串格式化方法,使用 f""
或 F""
表示格式化字符串,并通过 {}
直接嵌入表达式。f-string 是目前推荐的格式化方法,因为它更简洁、更高效。
语法
f"Hello, {变量}! You are {表达式}."
示例
name = "Alice"
age = 30
message = f"Hello, {name}! You are {age} years old."
print(message)
# 输出:Hello, Alice! You are 30 years old.
高级用法
-
表达式支持:
message = f"Next year, {name} will be {age + 1} years old." print(message) # 输出:Next year, Alice will be 31 years old.
说明:可以在占位符中嵌入表达式,如age+1。
-
格式化数字:
pi = 3.1415926 message = f"The value of pi is {pi:.2f}" print(message) # 输出:The value of pi is 3.14
-
多行字符串:
message = ( f"Name: {name}\n" f"Age: {age}\n" f"Next year: {age + 1}" ) print(message) # 输出: # Name: Alice # Age: 30 # Next year: 31
4. 格式化表格
在数据处理中,格式化表格是一个常见的需求。可以使用 str.format()
或 f-string 来实现。
示例
data = [
{"name": "Alice", "age": 30, "score": 85.5},
{"name": "Bob", "age": 25, "score": 90.0},
{"name": "Charlie", "age": 35, "score": 78.5}
]
print(f"{'Name':<10} {'Age':<5} {'Score':<6}")
print("-" * 25)
for item in data:
print(f"{item['name']:<10} {item['age']:<5} {item['score']:<6.2f}")
输出
Name Age Score
-------------------------
Alice 30 85.50
Bob 25 90.00
Charlie 35 78.50
5. 格式化日期和时间
Python 的 datetime
模块提供了丰富的日期和时间格式化功能,可以通过 strftime()
方法或 f-string 来实现。
示例
from datetime import datetime
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)
# 输出:2025-10-10 12:34:56
# 使用 f-string
print(f"Current time: {now:%Y-%m-%d %H:%M:%S}")
# 输出:Current time: 2025-10-10 12:34:56
总结
Python 提供了多种字符串格式化方法,各有优缺点:
-
%
格式化:简单但不够灵活,逐渐被淘汰。 -
str.format()
:灵活且功能强大,适合复杂场景。 -
f-string:简洁高效,推荐在 Python 3.6+ 中使用。
在实际开发中,建议优先使用 f-string,因为它不仅语法简洁,而且性能更好。