当前位置: 首页 > news >正文

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}左侧补零至宽度40009
{:<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 版本或构建结构化字符串(如表格、报告、日志)的自动化程序中仍然非常实用。


http://www.dtcms.com/a/310034.html

相关文章:

  • 【C语言入门级教学】字符指针变量
  • 逻辑回归算法中的一些问题
  • React核心:组件化与虚拟DOM揭秘
  • 《React Router深解:复杂路由场景下的性能优化与导航流畅性构建》
  • Rust → WebAssembly 的性能剖析全指南
  • NDI开发指南
  • SQL中的HAVING用法
  • SQL中的LEFT JOIN
  • 图论-最短路Floyd算法
  • OpenAI ChatGPT Agent横空出世:全能工具+实时交互,重新定义AI智能体的终极形态
  • 【go】switch用法梳理与总结
  • [论文阅读] 人工智能 + 软件工程 | Trae Agent:让AI智能体高效解决仓库级软件问题,登顶SWE-bench排行榜
  • gd32modbus从机移植
  • Nature图形复现—Graphpad绘制带P值的含数据点的小提琴图
  • etcd 的安装与使用
  • Go语言中的盲点:竞态检测和互斥锁的错觉
  • Python day31
  • qt中的手势
  • Element-plus的 ElMessage 另一种展示形式
  • 1.6万 Star 的流行容器云平台停止开源
  • 【n8n】如何跟着AI学习n8n【04】:错误处理与日志监控
  • 学习游戏制作记录(各种水晶能力以及多晶体)8.1
  • 流式编程终端操作
  • UnionApplication
  • 【C++/STL】vector基本介绍
  • 关于cherryusb的in/out完成条件
  • WAIC现场速递:AI热浪扑面而来|小奇说
  • QD9361开发板教程:基于zynq的PS端的DDR3测试
  • Vue+Cesium 基础搭建
  • 智能体的未来:AGI路径上的关键技术突破