当前位置:

首页 > 编程开发 > Python使用os、pathlib、shutil实现文件与目录自动化实战

Python使用os、pathlib、shutil实现文件与目录自动化实战

Python的os、pathlib、shutil三个内置库可实现文件与目录自动化。pathlib以面向对象方式处理路径、判断和遍历;os负责系统级操作与环境参数;shutil支持文件夹复制、递归删除和压缩解压。通过批量重命名、分类整理和压缩备份等实战案例,覆盖日常高频文件处理需求。

前言

在日常办公、开发运维或者数据处理中,文件操作绝对算得上是最高频的需求之一。想想看,你是不是经常需要批量重命名一堆照片、把散落的文档按格式归归类、压缩整个文件夹、清理那些怎么也删不完的缓存文件,甚至是批量读写几百个数据文件?这些事儿要是手动来,不仅重复繁琐,效率还低得让人抓狂。而Python恰好能通过几个内置库,把这一切变成全自动的流水线。

Python使用os、pathlib、shutil实现文件与目录自动化实战

实现文件自动化的核心,主要靠三个Python内置库——os、pathlib、shutil。它们不需要额外安装,开箱即用,覆盖了从基础的路径处理、系统级操作到高级批量文件处理的全场景。毫不夸张地说,这三大库是Python自动化领域的必修课,也是提升工作效率的关键技能。

在正式开讲之前,先来一张对比表,让大家对这三个库有个全局印象:

对比维度

pathlib

os

shutil

定位

现代面向对象路径操作

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

高级文件批量操作

Python版本

3.4+ 新增

全版本兼容

全版本兼容

代码风格

简洁优雅、面向对象

函数式、传统繁琐

功能聚合、调用简单

核心优势

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

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

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

学习难度

低

中

低

推荐场景

日常90%文件路径操作

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

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

接下来,我们将从现代首选pathlib入手,循序渐进地讲解三大库的核心用法,每个知识点都配上可以直接运行的代码。最后,再通过几个综合实战案例,带你真正掌握文件自动化的全流程开发。

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

1.1 三大文件库定位区别

很多新手一开始就容易把os、pathlib、shutil这三个库搞混。其实一句话就能区分清楚:

  • pathlib:新时代的文件操作标准,专门用来替代os.path,处理路径、文件判断、遍历、读写的利器,代码写出来就是干净利落。
  • os:侧重于系统底层操作,比如创建删除目录、处理系统环境变量、修改文件权限,老项目里随处可见它的身影。
  • shutil:高级工具库,专门来补充os的短板。它支持整个文件夹复制、递归删除、文件压缩解压——这些恰恰是os和pathlib力所不能及的。

1.2 环境与导入方式

好消息是,这三个库都是Python内置的,连pip都不用装,直接导入就能用:

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

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

pathlib采用面向对象的设计,彻底抛弃了os.path那种繁琐的字符串拼接方式。更重要的是,它跨平台兼容性极好——不管你在Windows还是Linux/Mac上跑,路径分隔符它自己会处理好。这也是目前Python官方推荐的文件操作方式。

2.1 Path路径创建与解析

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 遍历目录与批量匹配文件

批量处理文件时,最常用的就是遍历目录和按后缀名筛选文件。pathlib的rglob方法支持递归遍历所有子文件夹,堪称批量处理的核心利器:

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模块虽然传统,但在某些场景下依然是不可替代的存在。它擅长系统层级操作,比如获取环境变量、修改文件权限,或者你需要在老旧项目里做兼容的时候,它是最稳妥的选择。

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", ".a vi", ".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处理批量复杂操作:文件夹复制、递归删除、压缩解压,它就是那个“救火队员”。

把这三大库组合起来使用,基本上可以横扫所有文件自动化场景。有了它们,那些重复的、枯燥的手工操作,就交给脚本去搞定吧。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python
相关文章 更多
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

langgraph python guide中文入门教程详解
langgraph python guide中文入门教程详解

本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

Windows 安装 Python:从官方入口到虚拟环境的可复现实践
Windows 安装 Python:从官方入口到虚拟环境的可复现实践

面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

了解Python编程领域中最好的就业行业
了解Python编程领域中最好的就业行业

了解Python编程领域中最好的就业行业导语:近年来,Python作为一种易学易用的编程语言,越来越受到企业和开发者的青睐。在Python编程领域中,有许多就业机会,涵盖了各个行业。本文将介绍一些Python编程领域中最好的就业行业,并提供相应的代码示例。数据科学和机器学习数据科学和机器学习是Python编程领域中最热门的行业之一。Python在数据科学和机

python处理csv文件的方法完整实用教程
python处理csv文件的方法完整实用教程

针对Python处理CSV文件时常见的编码报错、内存溢出和数据类型错误,本文对比标准库csv与Pandas库的适用场景,提供可复制的代码示例和因果排查思路,帮助开发者选择最优处理方案。

python字典怎么按值排序用sorted函数实现升降序
python字典怎么按值排序用sorted函数实现升降序

本文介绍如何使用Python的sorted函数对字典按值进行升序和降序排序,结合具体代码示例和应用场景,帮助读者理解排序逻辑及其在数据处理中的实际价值。

python正则匹配修改方法与代码实现教程
python正则匹配修改方法与代码实现教程

深入讲解Python中使用re.sub进行正则匹配与替换的技巧,涵盖基础语法、分组引用及回调函数应用,帮助开发者解决复杂字符串修改需求,提升代码效率与可维护性。

selenium中文安装包下载与安装教程
selenium中文安装包下载与安装教程

详解Selenium在Python环境下的安装步骤,包括使用pip安装库文件、下载对应版本的浏览器驱动以及验证安装是否成功,适合自动化测试初学者参考。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
IntelliJ IDEA macOS版
IntelliJ IDEA macOS版
Mac

IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

PyCharm macOS版
PyCharm macOS版
Mac

JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

WebStorm macOS版
WebStorm macOS版
Mac

JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

WINDOWS 更多
IntelliJ IDEA Windows版
IntelliJ IDEA Windows版
Windows

JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

PhpStorm Windows版
PhpStorm Windows版
Windows

PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

PyCharm Windows版
PyCharm Windows版
Windows

PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,