Python 的标准库之所以强大,是因为它“开箱即用”。今天我们要讲的 time 和 pathlib 模块,一个是处理时间的利器,一个是操作文件路径的现代化工具。
time 模块:专注于时间戳、程序休眠和性能测试,是底层时间处理的基石。pathlib 模块:Python 3.4+ 引入的面向对象路径处理库,它比传统的 os.path更直观、更优雅,是处理文件系统的推荐方式。
⏱️ time 模块:掌控时间的流逝
time 模块主要用于获取当前时间、让程序暂停以及计算代码运行时间。它不需要安装,直接导入即可使用。
1. 获取时间:时间戳与结构化时间
在计算机中,时间通常有两种表现形式:
- 时间戳 (Timestamp):一个浮点数,代表从 1970年1月1日 00:00:00 到现在的秒数。它是计算机内部计算时间差的标准。
- 结构化时间 (struct_time):一个包含年、月、日、时、分、秒等 9 个元素的元组,更适合人类阅读。
常用函数对比:
| | |
|---|
time.time() | | |
time.localtime() | | struct_time |
time.gmtime() | | 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):将结构化时间转换为指定格式的字符串。- 常用格式代码:
%Y: 四位年份 (2026)%m: 月份 (01-12)%d: 日期 (01-31)%H: 小时 (00-23)%M: 分钟 (00-59)%S: 秒 (00-59)
import timenow = 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 的 /)。
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 | |
| 获取后缀 | p.suffix | |
| 获取文件名(无前缀) | p.stem | |
| 获取父目录 | p.parent | |
from pathlib import Pathbase = Path('/home/user')# 优雅的路径拼接file_path = base / 'documents' / 'report.pdf'print(file_path) # 输出: /home/user/documents/report.pdfprint(f"文件名: {file_path.name}") # report.pdfprint(f"后缀: {file_path.suffix}") # .pdfprint(f"父目录: {file_path.parent}") # /home/user/documents
3. 文件与目录的常用操作
Path 对象不仅代表路径,还包含了对文件系统的操作方法。
p.mkdir(parents=True, exist_ok=True): 创建目录(
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,它能让你的文件操作代码更加简洁、易读且不易出错。