Python使用os、pathlib、shutil實現(xiàn)文件與目錄自動化實戰(zhàn)
前言
在日常辦公、開發(fā)運維、數(shù)據(jù)處理場景中,文件操作是最高頻的需求之一:批量重命名照片、分類整理文檔、批量壓縮文件夾、清理無用緩存文件、批量讀寫數(shù)據(jù)文件等。手動操作重復繁瑣、效率極低,而Python可以通過內(nèi)置庫實現(xiàn)全自動化處理。
Python文件自動化核心依賴三大內(nèi)置庫,無需額外安裝,開箱即用,覆蓋基礎路徑處理、系統(tǒng)級操作、高級批量文件處理全場景,是Python自動化必備核心技能。
Python 文件操作三大核心庫對比:
對比維度 | pathlib | os | shutil |
|---|---|---|---|
定位 | 現(xiàn)代面向?qū)ο舐窂讲僮?/p> | 系統(tǒng)級底層文件/目錄操作 | 高級文件批量操作 |
Python版本 | 3.4+ 新增 | 全版本兼容 | 全版本兼容 |
代碼風格 | 簡潔優(yōu)雅、面向?qū)ο?/p> | 函數(shù)式、傳統(tǒng)繁瑣 | 功能聚合、調(diào)用簡單 |
核心優(yōu)勢 | 路徑處理極簡、跨平臺、可讀性強 | 權限操作、系統(tǒng)參數(shù)獲取、兼容性強 | 支持文件夾整體復制、壓縮、遞歸操作 |
學習難度 | 低 | 中 | 低 |
推薦場景 | 日常90%文件路徑操作 | 系統(tǒng)配置、權限修改、兼容舊項目 | 批量復制、移動、壓縮、刪除文件夾 |
本文將從現(xiàn)代首選pathlib入手,循序漸進講解三大庫的核心用法,搭配可直接運行的代碼案例,最后通過綜合實戰(zhàn),帶你掌握文件自動化全流程開發(fā)。
第一章:核心庫對比與環(huán)境準備
1.1 三大文件庫定位區(qū)別
很多新手會混淆os、pathlib、shutil三個庫,簡單一句話區(qū)分:
- pathlib:新時代文件操作標準,替代os.path,專門處理路徑、文件判斷、遍歷、讀寫,代碼極簡
- os:系統(tǒng)底層操作,處理目錄創(chuàng)建、刪除、系統(tǒng)環(huán)境、文件權限,兼容老舊項目
- shutil:高級工具庫,彌補os短板,支持整個文件夾復制、遞歸刪除、文件壓縮解壓
1.2 環(huán)境與導入方式
三個庫均為Python內(nèi)置標準庫,無需pip安裝,直接導入即可使用:
# 導入三大核心庫 from pathlib import Path import os import shutil
第二章:pathlib —— 現(xiàn)代Python文件操作首選
pathlib采用面向?qū)ο笤O計,摒棄了os.path繁瑣的字符串拼接方式,跨平臺兼容性極強(自動適配Windows/Linux/Mac路徑分隔符),是目前Python官方推薦的文件操作方式。
2.1 Path路徑創(chuàng)建與解析
支持絕對路徑、相對路徑創(chuàng)建,可快速拼接路徑、獲取路徑各層級信息:
from pathlib import Path
# 1. 創(chuàng)建相對路徑
p1 = Path("test/file.txt")
# 2. 創(chuàng)建絕對路徑
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("文件大小(字節(jié)):", p.stat().st_size)
print("最后修改時間:", p.stat().st_mtime)2.3 文件/目錄創(chuàng)建與刪除
from pathlib import Path
# 1. 創(chuàng)建單層目錄
dir1 = Path("test_dir")
dir1.mkdir(exist_ok=True) # exist_ok=True 存在則不報錯
# 2. 創(chuàng)建多級嵌套目錄
dir2 = Path("a/b/c")
dir2.mkdir(parents=True, exist_ok=True)
# 3. 創(chuàng)建空文件
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("圖片總數(shù):", len(img_list))
# 3. 匹配所有txt文檔
txt_list = list(root.rglob("*.txt"))2.5 文件讀寫極簡操作
pathlib簡化了文件讀寫操作,無需手動open/close,代碼更簡潔:
from pathlib import Path
file = Path("data.txt")
# 寫入內(nèi)容(覆蓋寫入)
file.write_text("Hello Python文件自動化!", encoding="utf-8")
# 追加內(nèi)容
file.write_text("\n新增一行內(nèi)容", encoding="utf-8")
# 讀取內(nèi)容
content = file.read_text(encoding="utf-8")
print("文件內(nèi)容:", content)
# 讀寫二進制文件(圖片、視頻等)
img = Path("test.jpg")
img_data = img.read_bytes()第三章:os模塊 —— 底層系統(tǒng)級文件操作
os模塊是Python傳統(tǒng)文件操作核心,主打系統(tǒng)層級操作,適合需要兼容舊項目、修改文件權限、獲取系統(tǒng)路徑的場景。
3.1 常用路徑與目錄操作
import os
# 獲取當前工作目錄
print("當前目錄:", os.getcwd())
# 切換工作目錄
os.chdir("./test")
# 創(chuàng)建/刪除目錄
os.mkdir("os_dir") # 單層目錄
os.makedirs("x/y/z", exist_ok=True) # 多級目錄
os.rmdir("os_dir") # 刪除空目錄
# 路徑拼接(傳統(tǒng)方式)
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 系統(tǒng)環(huán)境與文件權限操作
import os
# 獲取系統(tǒng)環(huán)境變量
print("系統(tǒng)PATH:", os.environ.get("PATH"))
# 修改文件權限(Linux/Mac生效)
os.chmod("test.txt", 0o755)
# 獲取文件絕對路徑
abs_path = os.path.abspath("test.txt")
print("絕對路徑:", abs_path)3.3 傳統(tǒng)文件遍歷方法
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("./解壓目錄")第五章:綜合實戰(zhàn):文件批量自動化工具
整合三大庫核心功能,開發(fā)3個可直接落地的實戰(zhàn)腳本,覆蓋日常高頻自動化場景。
5.1 實戰(zhàn)1:批量重命名文件
批量修改文件夾內(nèi)所有圖片名稱,統(tǒng)一格式:序號+自定義名稱
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}")
# 調(diào)用
batch_rename("./photos", prefix="旅行照片")5.2 實戰(zhàn)2:分類整理不同格式文件
自動識別文件后綴,將圖片、文檔、視頻、壓縮包分類歸檔
from pathlib import Path
import shutil
def classify_files(folder_path):
"""文件自動分類整理"""
path = Path(folder_path)
# 定義文件分類規(guī)則
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
# 調(diào)用
classify_files("./混合文件")5.3 實戰(zhàn)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")
# 調(diào)用
zip_folder("./photos_processed")三大庫選擇指南與最佳實踐
業(yè)務需求 | 推薦庫 | 核心原因 |
|---|---|---|
路徑拼接、文件遍歷、批量篩選 | pathlib | 代碼簡潔、跨平臺、可讀性極強 |
文件讀寫、判斷文件屬性 | pathlib | 極簡API,無需手動管理文件句柄 |
系統(tǒng)環(huán)境獲取、文件權限修改 | os | 專屬系統(tǒng)級操作,無替代方案 |
兼容老舊Python項目 | os/os.path | 低版本Python不支持pathlib |
文件夾整體復制、遞歸刪除 | shutil | 唯一支持批量文件夾操作的內(nèi)置庫 |
文件壓縮、解壓、批量遷移 | shutil+zipfile | 功能完善、開箱即用 |
總結(jié)
1、優(yōu)先使用pathlib:日常90%的文件路徑、遍歷、讀寫場景,pathlib都是最優(yōu)選擇,代碼更優(yōu)雅、跨平臺兼容性更好。
2、os作為補充:僅在需要系統(tǒng)級操作、兼容舊項目時使用。
3、shutil處理批量復雜操作:文件夾復制、遞歸刪除、壓縮解壓必備。
三者組合使用,可以實現(xiàn)所有文件自動化場景,徹底解放雙手,大幅提升辦公和開發(fā)效率。
以上就是Python使用os、pathlib、shutil實現(xiàn)文件與目錄自動化實戰(zhàn)的詳細內(nèi)容,更多關于Python文件與目錄自動化的資料請關注腳本之家其它相關文章!

