【Python】pathlib和os.path区别

0.前言

pathlib模块是Python3中用于面向对象的文件系统路径操作的模块。它提供了Path类来进行路径相关的操作。使用pathlib可以以更直观和易于理解的方式处理文件路径和文件。本文主要介绍新模块pathlib和老模块os.path对文件路径相关操作的区别。

1.os.path相关操作

import os

# 拼接路径
path = os.path.join('/home', 'user', 'docs', 'file.txt')

# 获取当前文件的绝对路径
abs_path = os.path.abspath('my_file.txt')

# 将路径分割成目录和文件名
dir_name, file_name = os.path.split('/home/user/docs/file.txt')

# 分离文件名和扩展名
root, ext = os.path.splitext('/home/user/docs/file.txt')

# 检查路径是否存在
exists = os.path.exists('/home/user/docs')

# 检查是否是绝对路径
is_absolute = os.path.isabs('/home/user/docs')

# 检查是否是文件
is_file = os.path.isfile('/home/user/docs/file.txt')

# 检查是否是目录
is_dir = os.path.isdir('/home/user/docs')

# 获取路径的目录部分
dirname = os.path.dirname('/home/user/docs/file.txt')

# 获取路径的最后一部分(文件名或最后一级目录名)
basename = os.path.basename('/home/user/docs/file.txt')

# 标准化路径,解决多余的分隔符和上级引用等问题
norm_path = os.path.normpath('/home//user/docs/../file.txt')

# 获取文件大小
file_size = os.path.getsize('/home/user/docs/file.txt')

# 获取文件的最后修改时间
mod_time = os.path.getmtime('/home/user/docs/file.txt')

# 检查两个路径是否指向同一个文件
samefile = os.path.samefile('/path/to/file1', '/path/to/file1_symlink')

2.pathlib相关操作

创建Path对象

from pathlib import Path

# 创建指向当前目录的Path对象
p = Path('.')

# 创建指向特定文件或目录的Path对象
p = Path('/usr/bin/python3')

# 使用home方法获取用户的家目录
home_path = Path.home()

路径拼接

# 在Path对象后面拼接路径
new_p = p / 'lib' / 'python3.9'

路径解析和属性

# 获取绝对路径
p.resolve()

# 获取父目录
p.parent

# 获取路径的最后一部分
print(p.name)

# 获取不含后缀的文件名
p.stem

# 获取文件的后缀
p.suffix

# 获取所有父目录
list(p.parents)

检查路径

# 检查路径是否存在
p.exists()

# 检查是否是文件
p.is_file()

# 检查是否是目录
p.is_dir()

# 检查是否是绝对路径
p.is_absolute()

文件操作

# 读写文件(Path对象需要转换为字符串或使用open方法)
with p.open('r', encoding='utf-8') as f:
    content = f.read()

# 或者
content = (p / 'some_file.txt').read_text(encoding='utf-8')

# 写入文件
(p / 'output.txt').write_text("Hello, pathlib!", encoding='utf-8')

# 删除文件
(p / 'to_be_deleted.txt').unlink()

目录操作

# 列出目录下所有文件和目录
list(p.iterdir())

# 创建新目录
(p / 'new_dir').mkdir(parents=True, exist_ok=True)

# 删除空目录
(p / 'empty_dir').rmdir()

# 迭代特定模式的文件和目录
for py_file in p.glob('**/*.py'):
    print(py_file)

路径移动和重命名

# 重命名文件或目录
p.rename('new_name')

# 移动文件或目录
p.replace('path/to/new_location')

3.总结

pathlib模块相对于os.path模块在处理文件路径时具有多项优势,增强了文件操作性,面向对象的特点使其代码的可读性和可维护性更高,在现代Python编程中成为处理文件路径的推荐选择

### Python `os.path` 模块使用详解 #### 基本介绍 `os.path` 是 Python 的一个重要子模块,提供了许多用于处理文件路径的功能。这些功能能够帮助开发者轻松实现跨平台的路径管理[^4]。 #### 主要功能概述 此模块允许执行多种与路径有关的操作,比如获取绝对路径、分离扩展名以及判断路径是否存在等。这不仅简化了代码编写过程,还提高了程序在不同操作系统间的兼容性[^3]。 #### 实际应用案例展示 下面是一些常见的用法实例: - **获取当前工作目录** 获取脚本运行所在的工作目录对于很多应用程序来说都是必要的。 ```python import os print(os.getcwd()) # 打印当前工作目录 ``` - **连接路径组件** 当需要构建完整的文件路径时,可以利用 join 方法安全地组合各个部分而不用担心斜杠的方向问题。 ```python path = os.path.join('folder', 'subfolder', 'file.txt') print(path) # 输出: folder/subfolder/file.txt (Linux/MacOS) 或者 folder\subfolder\file.txt (Windows) ``` - **分割路径成头尾两部分** 这有助于解析复杂的路径结构或将特定文件移动到其他位置。 ```python head, tail = os.path.split('/home/user/test.txt') print(f'Head: {head}, Tail: {tail}') # Head: /home/user, Tail: test.txt ``` - **检查路径存在与否** 在尝试访问某个资源前先验证其可用性是非常重要的一步。 ```python exists = os.path.exists('/etc/hosts') print(exists) # 如果/etc/hosts 存在,则返回 True 否则 False ``` - **获得文件大小** 对于某些应用场景而言,知道目标文件的实际尺寸可能很有价值。 ```python size = os.path.getsize('/tmp/sample.log') print(size) # 返回 sample.log 文件字节数量 ``` 以上只是展示了 `os.path` 提供的一部分核心特性,在实际项目中还有更多实用的方法等待探索。值得注意的是,尽管 `os.path` 非常强大且灵活,但在现代 Python 开发实践中推荐优先考虑使用 `pathlib.Path` 类来进行更加直观的对象化路径操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸟哥大大

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值