📊 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+ 提供),用来处理 文件路径
  • 相比传统的 osos.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”:更易读、跨平台安全、适合变量拼接。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐