文件和目录操作
掌握
os、shutil、pathlib三大模块的核心用法能独立完成目录遍历、创建 / 删除、复制 / 移动、批量重命名等操作
理解面向对象路径处理
pathlib的优势,替代传统字符串路径
核心讲解
文件读写是基础,文件和目录操作是自动化脚本的核心能力。Python 提供了多层级的工具,从底层系统调用到高层封装,满足不同场景需求。
(1)os 模块:系统级文件目录操作
os 是最基础的系统交互模块,封装了操作系统的文件目录 API。
路径操作:
os.path.join()拼接路径、os.path.abspath()获取绝对路径、os.path.exists()判断是否存在、os.path.isfile()/isdir()判断类型目录操作:
os.mkdir()创建单级目录、os.makedirs()创建多级目录、os.rmdir()删除空目录、os.listdir()列出目录下所有文件文件属性:
os.path.getsize()获取文件大小、os.path.getmtime()获取修改时间遍历目录:
os.walk()递归遍历所有子目录和文件,是批量处理文件的核心函数
(2)shutil 模块:高级文件操作
shutil 是 os 的补充,提供了更高级的文件操作,专门处理复制、移动、删除、压缩等场景。
shutil.copy()/shutil.copy2():复制文件,copy2 保留文件元信息shutil.move():移动 / 重命名文件shutil.rmtree():递归删除非空目录(慎用!)shutil.make_archive()/shutil.unpack_archive():压缩和解压文件
(3)pathlib 模块:面向对象的路径处理(推荐)
Python3.4+ 引入的现代化路径库,用面向对象的方式处理路径,替代 os.path 的字符串操作,代码更优雅、不易出错。
核心类:
Path()创建路径对象常用操作:
/运算符拼接路径、exists()判断存在、mkdir()创建目录、glob()模式匹配文件、iterdir()遍历目录优势:跨平台自动适配路径分隔符,支持链式调用,代码可读性强
代码示例
import os
import shutil
from pathlib import Path
# ===== os模块示例 =====
# 拼接路径
file_path = os.path.join("data", "test.txt")
print("绝对路径:", os.path.abspath(file_path))
# 创建多级目录
os.makedirs("project/subdir", exist_ok=True)
# 遍历目录
for root, dirs, files in os.walk("project"):
for f in files:
print(os.path.join(root, f))
# ===== shutil模块示例 =====
# 复制文件
shutil.copy("test.txt", "project/test_copy.txt")
# 移动文件
shutil.move("project/test_copy.txt", "project/subdir/")
# 压缩文件夹
shutil.make_archive("project_backup", "zip", "project")
# ===== pathlib模块示例(推荐) =====
# 创建路径对象
p = Path("data") / "demo.txt"
# 判断并创建父目录
p.parent.mkdir(parents=True, exist_ok=True)
# 写入文件
p.write_text("Hello pathlib", encoding="utf-8")
# 读取文件
print(p.read_text(encoding="utf-8"))
# 模式匹配所有py文件
py_files = list(Path(".").glob("*.py"))
print("当前目录py文件:", py_files)
# 遍历目录
for item in Path("project").iterdir():
if item.is_file():
print(f"文件:{item.name},大小:{item.stat().st_size}字节")
常见误区
路径拼接用字符串拼接:手动用
+ "\\"拼接路径,Windows 和 macOS/Linux 不兼容,务必用os.path.join或pathlibrmtree 误删数据:
shutil.rmtree()会直接递归删除所有内容,没有回收站,使用前务必校验路径相对路径依赖工作目录:相对路径取决于程序运行时的工作目录,不是文件所在目录,关键场景优先用绝对路径
忽略文件权限:创建 / 删除文件时可能遇到权限不足,Windows 尤其注意管理员权限
课后练习
编写脚本:在当前目录创建
docs/images两级目录编写脚本:遍历指定目录,找出所有
.txt文件,统计总大小用 pathlib 实现:批量将指定目录下的所有
.txt文件重命名为.md尝试将一个文件夹压缩成 zip 格式,再解压到指定目录

