Python pathlib vs os.path 功能对照表
·
文章目录
📊 pathlib vs os.path 功能对照表
| 功能 | os / os.path 写法 |
pathlib 写法 |
说明 |
|---|---|---|---|
| 当前工作目录 | os.getcwd() |
Path.cwd() |
获取当前工作目录 |
| 用户主目录 | os.path.expanduser("~") |
Path.home() |
获取用户 home 目录 |
| 路径拼接 | os.path.join("a", "b", "c.txt") |
Path("a") / "b" / "c.txt" |
更直观的 / 运算符 |
| 绝对路径 | os.path.abspath("file.txt") |
Path("file.txt").resolve() |
获取绝对路径 |
| 父目录 | os.path.dirname(path) |
Path(path).parent |
获取父目录 |
| 文件名 | os.path.basename(path) |
Path(path).name |
获取文件名 |
| 文件扩展名 | os.path.splitext(path)[1] |
Path(path).suffix |
获取扩展名 |
| 文件名(无扩展) | os.path.splitext(path)[0] |
Path(path).stem |
获取文件名(不含扩展) |
| 路径是否存在 | os.path.exists(path) |
Path(path).exists() |
判断路径存在 |
| 是否是文件 | os.path.isfile(path) |
Path(path).is_file() |
判断是否是文件 |
| 是否是目录 | os.path.isdir(path) |
Path(path).is_dir() |
判断是否是目录 |
| 创建目录 | os.makedirs(path, exist_ok=True) |
Path(path).mkdir(parents=True, exist_ok=True) |
递归创建目录 |
| 遍历目录 | os.listdir(path) |
Path(path).iterdir() |
遍历子文件/目录 |
| 递归查找文件 | glob.glob("**/*.txt", recursive=True) |
Path(path).rglob("*.txt") |
递归查找 |
| 文件大小 | os.path.getsize(path) |
Path(path).stat().st_size |
获取文件大小 |
| 修改时间 | os.path.getmtime(path) |
Path(path).stat().st_mtime |
获取最后修改时间 |
| 删除文件 | os.remove(path) |
Path(path).unlink() |
删除文件 |
| 删除空目录 | os.rmdir(path) |
Path(path).rmdir() |
删除目录(仅空目录) |
✅ 总结
os.path→ 过程式、函数调用、字符串处理pathlib→ 面向对象、属性/方法调用、更直观
如果你在写 新项目,推荐全用 pathlib;
如果是 老代码迁移,对照这张表逐步替换即可。
常用用法示例
好 👍 我来给你整理一下 Python pathlib 的核心功能和常见用法。
📌 pathlib 简介
pathlib是 Python 标准库(Python 3.4+ 提供),用来处理 文件路径。- 相比传统的
os和os.path,它是 面向对象 的,更直观、简洁、可读性强。
核心类:
Path→ 表示文件或目录的路径对象PurePath→ 只处理路径字符串,不涉及实际文件系统
🚀 常用用法示例
1. 创建 Path 对象
from pathlib import Path
# 当前路径
p = Path.cwd()
print(p)
# 用户主目录
home = Path.home()
print(home)
# 相对路径
p = Path("data/file.txt")
print(p)
2. 路径拼接
p = Path("data") / "images" / "pic.jpg"
print(p) # data/images/pic.jpg
3. 路径属性
p = Path("data/file.txt")
print(p.name) # file.txt
print(p.stem) # file
print(p.suffix) # .txt # 后缀
print(p.parent) # data # 父目录
print(p.exists()) # True/False
print(p.is_file()) # True/False
print(p.is_dir()) # True/False
# 绝对路径
print("绝对路径:", p.resolve())
4. 遍历文件
p = Path("data")
# 列出目录下所有文件
for f in p.iterdir():
print(f)
# 递归查找所有 .txt 文件
for f in p.rglob("*.txt"):
print(f)
5. 文件操作
p = Path("example.txt")
# 写文件
p.write_text("Hello pathlib!", encoding="utf-8")
# 读文件
print(p.read_text(encoding="utf-8"))
# 文件大小
print(p.stat().st_size)
print("文件大小:", p.stat().st_size, "字节")
# 删除
p.unlink()
p.unlink(missing_ok=True) # Python 3.8+ 支持 missing_ok 避免文件不存在时报错
# 判断文件是否存在
print("文件是否存在:", p.exists())
# 判断是文件还是目录
print("是文件:", p.is_file())
print("是目录:", p.is_dir())
6. 创建目录
p = Path("new_folder/subfolder")
# 创建目录(父目录不存在也会创建)
p.mkdir(parents=True, exist_ok=True)
7. 拷贝/移动/重命名
pathlib 本身不直接支持 copy/move,需要结合 shutil:
import shutil
src = Path("a.txt")
dst = Path("backup/a.txt")
# 拷贝
shutil.copy(src, dst)
# 移动/重命名
shutil.move("a.txt", "b.txt")
8. 配合标准库 csv
import csv
from pathlib import Path
p = Path("example.csv")
# 写 CSV
with p.open("w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["name", "age"])
writer.writerow(["Alice", 25])
writer.writerow(["Bob", 30])
# 读 CSV
with p.open("r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
9.配合 pandas
import pandas as pd
from pathlib import Path
p = Path("example.csv")
# 保存 DataFrame 到 CSV
df = pd.DataFrame({"name": ["Alice", "Bob"], "age": [25, 30]})
df.to_csv(p, index=False, encoding="utf-8")
# 读取 CSV
df2 = pd.read_csv(p)
print(df2)
路径拼接时,Path(“a”) / “b” / "c.txt"和Path(“a/b/c.txt”)的区别
Path("a") / "b" / "c.txt"
优势:
- 可读性高:路径层次一目了然。
- 跨平台安全:Windows 下会自动用 \,Linux/macOS 下会用 /。
- 易维护:如果某一部分是变量,可以灵活替换:
base = Path("a")
filename = "c.txt"
path = base / "b" / filename # → a/b/c.txt
总结:
- 结果上没有区别:两者都会生成 Path(“a/b/c.txt”)。
- 推荐 Path(“a”) / “b” / “c.txt”:更易读、跨平台安全、适合变量拼接。
更多推荐



所有评论(0)