当前位置: 首页 > news >正文

Python 文件与目录自动化实战:os、pathlib、shutil 从入门到精通

前言

在日常办公、开发运维、数据处理场景中,文件操作是最高频的需求之一:批量重命名照片、分类整理文档、批量压缩文件夹、清理无用缓存文件、批量读写数据文件等。手动操作重复繁琐、效率极低,而Python可以通过内置库实现全自动化处理。

Python文件自动化核心依赖三大内置库,无需额外安装,开箱即用,覆盖基础路径处理、系统级操作、高级批量文件处理全场景,是Python自动化必备核心技能。

Python 文件操作三大核心库对比:

对比维度

pathlib

os

shutil

定位

现代面向对象路径操作

系统级底层文件/目录操作

高级文件批量操作

Python版本

3.4+ 新增

全版本兼容

全版本兼容

代码风格

简洁优雅、面向对象

函数式、传统繁琐

功能聚合、调用简单

核心优势

路径处理极简、跨平台、可读性强

权限操作、系统参数获取、兼容性强

支持文件夹整体复制、压缩、递归操作

学习难度

推荐场景

日常90%文件路径操作

系统配置、权限修改、兼容旧项目

批量复制、移动、压缩、删除文件夹

本文将从现代首选pathlib入手,循序渐进讲解三大库的核心用法,搭配可直接运行的代码案例,最后通过综合实战,带你掌握文件自动化全流程开发。

第一章:核心库对比与环境准备

1.1 三大文件库定位区别

很多新手会混淆os、pathlib、shutil三个库,简单一句话区分:

  • pathlib:新时代文件操作标准,替代os.path,专门处理路径、文件判断、遍历、读写,代码极简

  • os:系统底层操作,处理目录创建、删除、系统环境、文件权限,兼容老旧项目

  • shutil:高级工具库,弥补os短板,支持整个文件夹复制、递归删除、文件压缩解压

1.2 环境与导入方式

三个库均为Python内置标准库,无需pip安装,直接导入即可使用:

# 导入三大核心库 from pathlib import Path import os import shutil

第二章:pathlib —— 现代Python文件操作首选

pathlib采用面向对象设计,摒弃了os.path繁琐的字符串拼接方式,跨平台兼容性极强(自动适配Windows/Linux/Mac路径分隔符),是目前Python官方推荐的文件操作方式。

2.1 Path路径创建与解析

支持绝对路径、相对路径创建,可快速拼接路径、获取路径各层级信息:

from pathlib import Path # 1. 创建相对路径 p1 = Path("test/file.txt") # 2. 创建绝对路径 p2 = Path("/Users/xxx/Desktop/file.txt") # 3. 拼接路径(极简写法,替代字符串拼接) p3 = Path("test") / "img" / "photo.jpg" # 路径信息解析 print("文件名:", p3.name) # photo.jpg print("文件后缀:", p3.suffix) # .jpg print("纯文件名:", p3.stem) # photo print("上级目录:", p3.parent) # test/img print("是否绝对路径:", p3.is_absolute())

2.2 路径判断与属性获取

快速判断路径是否存在、是文件还是文件夹,获取文件大小、修改时间等属性:

from pathlib import Path p = Path("test.jpg") # 基础判断 print("路径是否存在:", p.exists()) print("是否是文件:", p.is_file()) print("是否是文件夹:", p.is_dir()) # 文件属性 if p.exists(): print("文件大小(字节):", p.stat().st_size) print("最后修改时间:", p.stat().st_mtime)

2.3 文件/目录创建与删除

from pathlib import Path # 1. 创建单层目录 dir1 = Path("test_dir") dir1.mkdir(exist_ok=True) # exist_ok=True 存在则不报错 # 2. 创建多级嵌套目录 dir2 = Path("a/b/c") dir2.mkdir(parents=True, exist_ok=True) # 3. 创建空文件 file = Path("test.txt") file.touch(exist_ok=True) # 4. 删除文件/空目录 file.unlink(missing_ok=True) # 删除文件 dir1.rmdir() # 删除空目录

2.4 遍历目录与批量匹配文件

支持遍历文件夹、批量筛选指定后缀文件,是批量处理的核心功能:

from pathlib import Path # 目标文件夹 root = Path("./photos") # 1. 遍历当前目录所有文件(不递归) for file in root.iterdir(): if file.is_file(): print("文件:", file.name) # 2. 批量匹配所有jpg/png图片(递归遍历子文件夹) img_list = list(root.rglob("*.jpg")) + list(root.rglob("*.png")) print("图片总数:", len(img_list)) # 3. 匹配所有txt文档 txt_list = list(root.rglob("*.txt"))

2.5 文件读写极简操作

pathlib简化了文件读写操作,无需手动open/close,代码更简洁:

from pathlib import Path file = Path("data.txt") # 写入内容(覆盖写入) file.write_text("Hello Python文件自动化!", encoding="utf-8") # 追加内容 file.write_text("\n新增一行内容", encoding="utf-8") # 读取内容 content = file.read_text(encoding="utf-8") print("文件内容:", content) # 读写二进制文件(图片、视频等) img = Path("test.jpg") img_data = img.read_bytes()

第三章:os模块 —— 底层系统级文件操作

os模块是Python传统文件操作核心,主打系统层级操作,适合需要兼容旧项目、修改文件权限、获取系统路径的场景。

3.1 常用路径与目录操作

import os # 获取当前工作目录 print("当前目录:", os.getcwd()) # 切换工作目录 os.chdir("./test") # 创建/删除目录 os.mkdir("os_dir") # 单层目录 os.makedirs("x/y/z", exist_ok=True) # 多级目录 os.rmdir("os_dir") # 删除空目录 # 路径拼接(传统方式) path = os.path.join("test", "img", "1.jpg") print("拼接路径:", path) # 判断路径 print(os.path.exists(path)) print(os.path.isfile(path)) print(os.path.isdir(path))

3.2 系统环境与文件权限操作

import os # 获取系统环境变量 print("系统PATH:", os.environ.get("PATH")) # 修改文件权限(Linux/Mac生效) os.chmod("test.txt", 0o755) # 获取文件绝对路径 abs_path = os.path.abspath("test.txt") print("绝对路径:", abs_path)

3.3 传统文件遍历方法

import os # 遍历目录所有文件 for root, dirs, files in os.walk("./test"): print("当前遍历目录:", root) print("子文件夹:", dirs) print("所有文件:", files)

第四章:shutil —— 高级文件批量操作工具

os和pathlib无法直接复制/移动非空文件夹,也不支持压缩解压,shutil完美弥补该短板,是批量文件处理的核心工具。

4.1 文件/文件夹复制与移动

import shutil # 1. 复制单个文件 shutil.copy("test.txt", "copy_test.txt") # 2. 复制整个文件夹(包含所有子文件) shutil.copytree("./src_dir", "./dst_dir", dirs_exist_ok=True) # 3. 移动文件/文件夹 shutil.move("copy_test.txt", "./dst_dir/copy_test.txt") # 4. 重命名文件 shutil.move("old_name.txt", "new_name.txt")

4.2 批量删除与递归清空

import shutil # 递归删除整个文件夹(包含所有文件和子文件夹) shutil.rmtree("./dst_dir", ignore_errors=True)

4.3 压缩与解压文件

import shutil import zipfile # 1. 压缩整个文件夹为zip shutil.make_archive("压缩包", "zip", "./src_dir") # 2. 解压zip文件 with zipfile.ZipFile("压缩包.zip", "r") as zip_ref: zip_ref.extractall("./解压目录")

第五章:综合实战:文件批量自动化工具

整合三大库核心功能,开发3个可直接落地的实战脚本,覆盖日常高频自动化场景。

5.1 实战1:批量重命名文件

批量修改文件夹内所有图片名称,统一格式:序号+自定义名称

from pathlib import Path def batch_rename(folder_path, prefix="风景"): """批量重命名图片文件""" path = Path(folder_path) # 筛选所有图片 img_list = list(path.glob("*.jpg")) + list(path.glob("*.png")) for idx, file in enumerate(img_list, 1): # 新文件名 new_name = f"{prefix}_{idx}{file.suffix}" new_path = path / new_name file.rename(new_path) print(f"重命名成功: {file.name} → {new_name}") # 调用 batch_rename("./photos", prefix="旅行照片")

5.2 实战2:分类整理不同格式文件

自动识别文件后缀,将图片、文档、视频、压缩包分类归档

from pathlib import Path import shutil def classify_files(folder_path): """文件自动分类整理""" path = Path(folder_path) # 定义文件分类规则 classify_rule = { "图片": [".jpg", ".png", ".jpeg", ".gif"], "文档": [".txt", ".pdf", ".docx", ".xlsx"], "压缩包": [".zip", ".rar", ".7z"], "视频": [".mp4", ".avi", ".mov"] } # 遍历所有文件 for file in path.iterdir(): if file.is_dir(): continue suffix = file.suffix.lower() # 匹配分类 for folder, suffix_list in classify_rule.items(): if suffix in suffix_list: target_dir = path / folder target_dir.mkdir(exist_ok=True) shutil.move(str(file), str(target_dir / file.name)) print(f"分类成功: {file.name} → {folder}") break # 调用 classify_files("./混合文件")

5.3 实战3:批量压缩指定目录文件

import shutil from datetime import datetime def zip_folder(folder_path): """批量压缩文件夹,命名带时间戳""" now = datetime.now().strftime("%Y%m%d%H%M%S") zip_name = f"文件备份_{now}" shutil.make_archive(zip_name, "zip", folder_path) print(f"压缩完成,文件名称:{zip_name}.zip") # 调用 zip_folder("./photos_processed")

三大库选择指南与最佳实践

业务需求

推荐库

核心原因

路径拼接、文件遍历、批量筛选

pathlib

代码简洁、跨平台、可读性极强

文件读写、判断文件属性

pathlib

极简API,无需手动管理文件句柄

系统环境获取、文件权限修改

os

专属系统级操作,无替代方案

兼容老旧Python项目

os/os.path

低版本Python不支持pathlib

文件夹整体复制、递归删除

shutil

唯一支持批量文件夹操作的内置库

文件压缩、解压、批量迁移

shutil+zipfile

功能完善、开箱即用

总结

1、优先使用pathlib:日常90%的文件路径、遍历、读写场景,pathlib都是最优选择,代码更优雅、跨平台兼容性更好。

2、os作为补充:仅在需要系统级操作、兼容旧项目时使用。

3、shutil处理批量复杂操作:文件夹复制、递归删除、压缩解压必备。

三者组合使用,可以实现所有文件自动化场景,彻底解放双手,大幅提升办公和开发效率。

http://www.jsqmd.com/news/906573/

相关文章:

  • Arduino智能助眠音箱DIY:从DFPlayer模块驯服到PCB实战
  • 卖 LED 灯珠怎么找客户?下游灯具厂在哪里
  • Honor of Kings 2026.05.24 S43 [15.9][15.8]
  • XRootD在400Gbps高带宽下的性能优化与实践
  • 手把手配置Aurix Development Studio的lsl文件:让TC397的变量乖乖住进你指定的‘内存房间’
  • 8051 PDATA内存访问机制与Keil µVision仿真解析
  • Matlab simulink 仿真FOC专题--(Park变换)
  • 终极指南:如何在Mac上解锁QQ音乐加密音频,实现跨平台播放自由
  • macOS文件预览效率低?QuickLook插件集让您的工作流焕然一新
  • 中兴B860AV1.2刷机避坑指南:S905M-B线刷固件选择、短接失败排查与刷砖救回
  • 终极指南:如何免费重置Navicat Premium 17.x在macOS上的试用期
  • 新手教程使用 Python 快速调用 Taotoken 上的多款大模型
  • 【OpenCV零基础实战】键盘交互、像素位运算、通道离合、色彩转换与智能抠像
  • 【统计法规】2.3统计地方性法规
  • 从零构建复古翻页显示器:Arduino步进电机与激光切割的机械艺术
  • 别再为Qt程序中文输入发愁了!一份通用的 fcitx5-qt 插件编译指南(覆盖Qt5/Qt6)
  • GD32F450 USB主机模式避坑指南:从STM32库移植到稳定读取U盘的全过程记录
  • 在arm7设备上观测大模型API调用的延迟与Token消耗情况
  • 基于Arduino的植物健康监测系统:从传感器到智能报警全解析
  • LoRA vs QLoRA实战:4bit量化让GPU显存暴降60%,单卡微调7B模型全流程详解
  • 别再空谈LTV了!用Python实战BG/NBD模型,手把手教你预测用户未来价值
  • 索引策略与SQL优化:从Explain对比到生产调优的完整方法论
  • 搭载实时 FPGA 处理系统的航天器上用于海上监视的超分辨率YOLO目标检测技术(意大利2026年研究)
  • [论文学习] 基于 Tile Tensors 的大规模神经网路加密资料框架
  • FactoryIO智能仓储项目复盘:我是如何用变量与定时器,把300行代码优化到50行的
  • 基于LT3008EDC的精密3.3V电源系统设计:从LDO原理到PCB布局实战
  • 苹果笔记本电脑怎么读取移动硬盘?苹果Mac移动硬盘怎么用? - 雨林谷
  • Visual C++运行库终极解决方案:告别DLL缺失错误,让软件运行更顺畅 [特殊字符]
  • 保姆级教程:手把手教你用XShell连接移动云ESC服务器,从配置到排错(含hosts.deny避坑指南)
  • 【AI面试临阵磨枪-81】你做过最复杂的 AI Agent 项目?技术栈、架构、难点、优化、成果