Python 标准库的强大之处在于“开箱即用”。今天,我们将聚焦于 time 和 pathlib 这两个模块:一个是处理时间的利器,另一个则是操作文件路径的现代化工具。
time 模块:专注于时间戳、程序休眠和性能测试,是底层时间处理的基石。
pathlib 模块:Python 3.4+ 引入的面向对象路径处理库,它比传统的 os.path 更直观、更优雅,是现代文件系统操作的推荐方式。对于在 Python 中进行文件和目录管理,pathlib 无疑是首选。
⏱️ time 模块:掌控时间的流逝
time 模块主要用于获取当前时间、让程序暂停以及计算代码运行时间。它属于标准库,直接导入即可使用。
1. 获取时间:时间戳与结构化时间
在计算机中,时间通常有两种表现形式:
- 时间戳 (Timestamp):一个浮点数,代表从 1970年1月1日 00:00:00(UTC)到现在的秒数。它是计算机内部计算时间差的标准。
- 结构化时间 (struct_time):一个包含年、月、日、时、分、秒等 9 个元素的元组,更适合人类阅读。
常用函数对比:
| 函数 |
功能 |
返回值类型 |
time.time() |
获取当前时间戳 |
浮点数 (float) |
time.localtime() |
将时间戳转换为本地结构化时间 |
struct_time 对象 |
time.gmtime() |
将时间戳转换为 UTC (格林威治) 结构化时间 |
struct_time 对象 |
import time
# 1. 获取时间戳
timestamp = time.time()
print(f"当前时间戳: {timestamp}")
# 2. 获取本地结构化时间
local_time = time.localtime()
print(f"本地时间元组: {local_time}")
# 输出示例: time.struct_time(tm_year=2026, tm_mon=4, tm_mday=9, ...)
# 3. 获取 UTC 时间
utc_time = time.gmtime()
print(f"UTC时间元组: {utc_time}")
2. 格式化时间:让时间更可读
机器喜欢时间戳,但我们人类更偏爱 "2026-04-09 20:35:22" 这种可读的格式。time.strftime() 函数就是为此而生。
time.strftime(format, t):将结构化时间 (t) 转换为指定格式的字符串。
- 常用格式代码:
%Y: 四位年份 (例如:2026)
%m: 月份 (01-12)
%d: 日期 (01-31)
%H: 小时 (00-23)
%M: 分钟 (00-59)
%S: 秒 (00-59)
import time
now = time.localtime()
# 格式化为:年-月-日 时:分:秒
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", now)
print(f"格式化后的时间: {formatted_time}")
# 输出: 2026-04-09 20:35:22
3. 程序暂停与性能测试
time.sleep(seconds):暂停程序执行指定的秒数。常用于定时任务或模拟等待操作。
- 计算代码耗时:通过记录开始和结束的时间戳并计算差值,可以轻松测量代码段的执行性能。
import time
# 1. 暂停程序
print("开始...")
time.sleep(2) # 暂停2秒
print("2秒后继续...")
# 2. 计算代码执行时间
start = time.time()
# 模拟一段耗时操作
time.sleep(1)
end = time.time()
print(f"代码执行耗时: {end - start:.2f} 秒")
📂 pathlib 模块:现代化的路径操作
在 Python 3 之前,我们习惯于使用 os.path 进行路径拼接,代码中往往充斥着大量的字符串操作。pathlib 模块引入了面向对象的思想,把文件路径当作一个对象来处理,使得操作更加直观,并且能自动适配不同操作系统(自动处理 Windows 的 \ 和 Linux/Mac 的 /)。
1. 创建路径对象
使用 Path 类可以将字符串路径转换成一个对象。
from pathlib import Path
# 创建路径对象
p = Path('/Users/data/project/main.py')
# 或者使用当前目录
current = Path('.')
2. 路径拼接与分解
pathlib 最大的亮点之一是使用 / 运算符来拼接路径,这比 os.path.join() 要清爽和直观得多。
| 操作 |
代码示例 |
说明 |
| 拼接路径 |
p / 'subfolder' / 'file.txt' |
自动适配系统分隔符 |
| 获取文件名 |
p.name |
包含后缀,如 main.py |
| 获取后缀 |
p.suffix |
如 .py |
| 获取文件名(无后缀) |
p.stem |
不含后缀,如 main |
| 获取父目录 |
p.parent |
返回上一级目录的 Path 对象 |
from pathlib import Path
base = Path('/home/user')
# 优雅的路径拼接
file_path = base / 'documents' / 'report.pdf'
print(file_path)
# 输出: /home/user/documents/report.pdf
print(f"文件名: {file_path.name}") # report.pdf
print(f"后缀: {file_path.suffix}") # .pdf
print(f"父目录: {file_path.parent}") # /home/user/documents
3. 文件与目录的常用操作
Path 对象不仅代表一个路径,还封装了许多对文件系统进行操作的方法。
判断存在性:
p.exists(): 路径是否存在
p.is_file(): 是否是文件
p.is_dir(): 是否是目录
创建与删除:
p.mkdir(parents=True, exist_ok=True): 创建目录(parents=True 可递归创建多级目录,exist_ok=True 在目录已存在时不报错)
p.rmdir(): 删除空目录
遍历目录:
p.iterdir(): 遍历当前目录下的所有文件和子目录
p.glob('*.py'): 使用通配符查找特定类型的文件(如所有 .py 文件)
from pathlib import Path
# 假设当前目录下有一个 data 文件夹
data_dir = Path('data')
# 1. 检查并创建目录
if not data_dir.exists():
data_dir.mkdir(parents=True)
print("目录已创建")
# 2. 遍历目录下的所有 .txt 文件
for txt_file in data_dir.glob('*.txt'):
print(f"找到文本文件: {txt_file}")
# 3. 获取绝对路径
print(f"绝对路径: {data_dir.resolve()}")
📌 总结
time 模块:是处理时间的“瑞士军刀”,无论是记录日志时间戳,还是进行性能分析(计算耗时),它都是基础且必不可少的工具。
pathlib 模块:是文件路径操作的“现代化方案”。如果你还在使用 os.path.join 进行字符串拼接,强烈建议尽快切换到 pathlib。它能让你的文件操作代码更加简洁、易读,并且极大地减少了因路径分隔符或字符串拼接导致的错误,这也是许多优秀开发者社区所倡导的现代Python实践。