文件系统与OS环境掌握:pathlib vs os
系列 02 – 用Python自由操控文件夹与文件
在编写程序时,创建文件、移动文件夹、检查路径等操作不可或缺。Python为此提供了两种解决方案。
一种是优雅处理路径的 pathlib,另一种是用于控制Python程序运行的 操作系统(OS)环境 的 os 模块。

如果把 pathlib 视为路径处理的明星,os 则更像后台的总监,负责灯光、音响、등의 모든 사항。与其抛弃其中之一,不如根据角色合理搭配使用。
1. os 与 pathlib 有何区别?
Python 3.4부터 pathlib가 도입되면서, 경로 처리 방식이 크게 개선되었습니다.
os/os.path- 以 字符串 处理路径。
- 함수형 스타일을 채택하여, 긴 경로 조합 체인을 처리할 때
os.path.join()、basename()、splitext()등 여러 함수를 여러 번 호출해야 합니다. -
동시에 운영 체제 기능(환경 변수, 프로세스, 권한 등)도 제공합니다.
-
pathlib - 以 对象(Path) 处理路径。
- 通过
/运算符组合、方法链调用,代码更短、更直观。 - 在文件/目录遍历、扩展名处理等“路径工作”上更为便捷。
2. 必要操作代码对比
2.1 查看当前工作目录并创建文件夹
import os
from pathlib import Path
# os 方式
current_os = os.getcwd()
if not os.path.exists("test_os"):
os.makedirs("test_os")
# pathlib 方式
current_pl = Path.cwd()
Path("test_pl").mkdir(exist_ok=True)
提示:若代码中路径频繁出现,pathlib 更利于维护。
2.2 组合路径(差异最明显的部分)
import os
from pathlib import Path
# os 方式
path_os = os.path.join("usr", "bin", "python")
# pathlib 方式(斜杠运算符)
path_pl = Path("usr") / "bin" / "python"
路径组合越多,pathlib 的可读性更高。
3. 推荐使用 pathlib 的原因:路径对象的力量
pathlib 的优势不仅限于“组合”。파일 정보를 얻을 때 그 장점이 더욱 두드러집니다.
| 功能 | os.path 方式 |
pathlib 方式 |
|---|---|---|
| 文件名提取 | os.path.basename(p) |
p.name |
| 去除扩展名的文件名 | os.path.splitext(os.path.basename(p))[0] |
p.stem |
| 扩展名检查 | os.path.splitext(p)[1] |
p.suffix |
| 父目录 | os.path.dirname(p) |
p.parent |
이러한 경로 처리 세부 사항들이 프로젝트에서 계속 누적되는데, pathlib를 통일하여 사용하면 팀 코드를 더 깔끔하게 유지할 수 있습니다.
4. 实战示例:查找特定扩展名的文件
在项目文件夹中查找所有 .txt 文件并列出。
from pathlib import Path
base_path = Path.cwd()
txt_files = list(base_path.rglob("*.txt")) # 包含子文件夹的递归搜索
for file in txt_files:
print(f"文件名: {file.name}, 绝对路径: {file.resolve()}")
단 한 줄의 rglob()만으로 재귀 검색을 완료할 수 있습니다.pathlib 在“文件查找”方面表现卓越。
5. os 的强项:操作系统环境控制
从这里开始,平衡才是关键。
pathlib 是路径专家,但 운영 체제 수준의 작업은 os의 영역입니다.
5.1 读取/写入环境变量(部署、安全、配置核心)
환경 차이를 고려하여, 설정 정보는 주로 환경 변수에 저장됩니다.
import os
# 读取
db_url = os.environ.get("DATABASE_URL", "sqlite:///local.db")
# 写入(仅对当前进程有效)
os.environ["APP_ENV"] = "production"
如 API 密钥、运行模式、日志级别、功能开关等,属于 os 的范畴。
5.2 进程/命令执行:让 OS 执行任务
외부 명령이나 프로세스 관리는 결국 운영 체제 기능에 속합니다.
os 提供低级接口,实际更常用的是 subprocess,但两者都属于 OS 控制。
import os
# 简单执行(返回退出码)
exit_code = os.system("echo hello")
print(exit_code)
더 세밀한 프로세스 제어(예: 시작, 교체, 포크 등)도 os 모듈에서 제공합니다.
5.3 权限、用户、工作目录等“环境本身”
- 权限更改(Unix 系统):
os.chmod() - 更改工作目录:
os.chdir() - 进程/用户信息:
os.getpid()等
这些功能 pathlib 无法替代,真正属于 os 的专属领域。
6. 结论:让 pathlib 与 os 分工合作
- 路径操作 / 文件搜索 / 文件名处理 →
pathlib更易读、易维护。 - 环境变量 / 进程 / 权限 / OS 功能 →
os专属。
最佳实践是:
- “路径尽量用
Path处理” - “需要与 OS 对话时使用
os”
7. 小结
pathlib大幅提升文件系统代码的可读性与可靠性。os超越路径,控制 Python 所在的操作系统环境。- 최적의 방법은 “둘 중 하나를 선택하는 것”이 아니라,
pathlib + os의 조합입니다.
一句话总结:路径/文件工作用 pathlib,OS 환경 제어는 os가 담당합니다.
相关文章:
目前没有评论。