找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2972

积分

0

好友

402

主题
发表于 1 小时前 | 查看: 3| 回复: 0

Python 标准库的强大之处在于“开箱即用”。今天,我们将聚焦于 timepathlib 这两个模块:一个是处理时间的利器,另一个则是操作文件路径的现代化工具。

  • 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实践。



上一篇:GameHub 为 Mac 带来原生级 Windows 游戏体验,3A游戏痛点有望解决
下一篇:高效管理终端命令:用 just 实现“命令即代码”与开发工作流自动化
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-13 07:33 , Processed in 0.792225 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表