Python中.format()使用详解和格式化控制台日志场景示例
Python 中的 .format()
方法是字符串格式化的经典方式之一,可读性强、兼容性好,在 Python 3.6+ 推出的 f-string 出现前是主流格式化方案,至今仍被广泛使用。
一、.format()
方法简介
.format()
是字符串的一个方法,用来将字符串中的 占位符 {}
替换为具体的值。
基本语法:
"模板字符串{}".format(值)
二、基本用法
1. 按顺序填充
print("Hello, {}!".format("world")) # → Hello, world!
print("{} + {} = {}".format(2, 3, 2 + 3)) # → 2 + 3 = 5
2. 按位置编号填充
print("{1} love {0}".format("Python", "I")) # → I love Python
3. 使用关键字参数填充
print("Name: {name}, Age: {age}".format(name="Tom", age=25))
4. 混合使用位置和关键字
print("{0} is a {role}".format("Alice", role="developer"))
三、格式化选项详解
1. 宽度 & 对齐
# 宽度为10,默认右对齐
print("{:10}".format("cat")) # 'cat '
# 左对齐
print("{:<10}".format("cat")) # 'cat '
# 右对齐
print("{:>10}".format("cat")) # ' cat'
# 居中
print("{:^10}".format("cat")) # ' cat '
2. 填充字符
print("{:*^10}".format("cat")) # '***cat****'
3. 数字格式化
# 小数点位数
print("{:.2f}".format(3.14159)) # 3.14
# 整数宽度补零
print("{:03d}".format(7)) # 007
4. 千位分隔符
print("{:,}".format(1234567)) # 1,234,567
5. 百分比 / 科学计数法
print("{:.2%}".format(0.075)) # 7.50%
print("{:.2e}".format(123456789)) # 1.23e+08
四、常见应用场景
场景 | 说明 |
---|---|
打印日志 | 格式化时间、等级、消息等 |
报表输出 | 数据对齐、数字保留小数 |
模板生成 | 替换用户输入、变量 |
文件命名、路径拼接 | 如 "file_{}.txt".format(index) |
兼容旧版本代码 | 适合低版本 Python 无 f-string 支持 |
五、实用代码示例
示例 1:生成报告行
name = "Alice"
score = 92.457
print("Student: {0:<10} | Score: {1:>6.2f}".format(name, score))
# → Student: Alice | Score: 92.46
示例 2:打印对齐表格
data = [("Tom", 88), ("Jane", 95), ("Mike", 76)]print("{:<10} {:>5}".format("Name", "Score"))
for name, score in data:print("{:<10} {:>5}".format(name, score))
示例 3:生成文件名
for i in range(3):filename = "report_{:03d}.txt".format(i)print(filename)
# report_000.txt
# report_001.txt
# report_002.txt
六:.format()
与 f-string 对比(简表)
特性 | .format() | f-string (Python 3.6+) |
---|---|---|
引号内表达式支持 | 不支持 | 支持(如:f"{a+b}" ) |
可读性 | 中等 | 更好 |
兼容性 | ✅ Python 2/3 均支持 | ❌ 仅 Python 3.6 及以上支持 |
字符串拼接性能 | 一般 | 较优 |
七、格式化控制台日志场景示例
在 格式化控制台日志 场景中,.format()
非常适合用于 美化输出、对齐信息、标明时间等级等,尤其当你不打算引入 logging
模块时,.format()
提供了简单、灵活的方式来构造清晰的日志输出。
1、典型日志格式需求
一个好用的控制台日志通常包含:
- 时间戳
- 日志等级(INFO、WARNING、ERROR 等)
- 模块/操作名称
- 消息内容(可带变量)
- 统一格式与对齐(列宽、颜色)
###2、代码示例:格式化控制台日志输出
示例 1:基本日志格式(对齐 + 时间)
from datetime import datetimedef log(level, module, message):time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print("{:<19} | {:<8} | {:<12} | {}".format(time_str, level, module, message))log("INFO", "Uploader", "上传成功,共 5 个文件")
log("ERROR", "Parser", "解析失败:缺失字段")
输出示例:
2025-07-31 16:42:01 | INFO | Uploader | 上传成功,共 5 个文件
2025-07-31 16:42:01 | ERROR | Parser | 解析失败:缺失字段
示例 2:加颜色(终端高亮)
def log(level, module, message):colors = {"INFO": "\033[92m", # Green"WARNING": "\033[93m", # Yellow"ERROR": "\033[91m", # Red"RESET": "\033[0m" # Reset}color = colors.get(level, "")reset = colors["RESET"]time_str = datetime.now().strftime("%H:%M:%S")print("{}[{:<8}] [{}] {}{}".format(color, level, time_str, message, reset))log("INFO", "Uploader", "✔ 上传成功")
log("WARNING", "Cache", "⚠ 缓存未命中")
log("ERROR", "Parser", "✘ 解析失败")
3、对齐控制技巧总结
占位符 | 含义 | 示例 |
---|---|---|
{:<10} | 左对齐,宽度10 | 'abc ' |
{:>10} | 右对齐,宽度10 | ' abc' |
{:^10} | 居中 | ' abc ' |
{:0>4} | 左侧补零至宽度4 | 0009 |
{:<8.2f} | 保留两位小数 + 左对齐8宽度 | '12.34 ' |
4、封装为日志函数(推荐用法)
def log(level, message, module='Main'):level = level.upper()time_str = datetime.now().strftime("%H:%M:%S")template = "[{time}] | {lvl:<7} | {mod:<10} | {msg}"line = template.format(time=time_str, lvl=level, mod=module, msg=message)print(line)# 用法
log("info", "初始化完成")
log("warning", "内存使用偏高", module="Monitor")
log("error", "连接失败,重试中...", module="Network")
5、适用场景
场景 | 是否适用 .format() |
---|---|
快速开发调试日志 | ✅ 非常适合 |
多模块统一输出格式 | ✅ |
美观报表或分组输出 | ✅ 可配合颜色/对齐 |
高级日志记录到文件 | ❌ 推荐用 logging |
彩色输出、跨平台兼容 | ✅ 但注意终端兼容性 |
6、.format()
与 f-string 在日志中的比较
特性 | .format() | f-string(3.6+) |
---|---|---|
可模板复用 | ✅ 非常适合多个字段 | ❌ 不适合做多模板代码复用 |
变量在字符串外定义 | ✅ (比如 .format(a=1, b=2) ) | ✅ |
嵌入复杂表达式 | ❌ 不支持如 a + b | ✅ 支持表达式计算 |
字符串对齐控制 | ✅ 支持 {:<10} | ✅ 同样支持 f"{var:<10}" |
7、小结
.format()
在日志场景下适合 统一模板、高兼容性输出 和 结构化对齐。- 推荐用于终端日志、小工具脚本输出、数据表格式化。
- 可结合颜色、模块名、时间戳做出类似专业日志效果。
八、总结
.format()
方法功能强大,适用于多种格式化场景,尤其在需要兼容旧 Python 版本或构建结构化字符串(如表格、报告、日志)的自动化程序中仍然非常实用。