最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用os、pathlib、shutil實(shí)現(xiàn)文件與目錄自動(dòng)化實(shí)戰(zhàn)

 更新時(shí)間:2026年05月29日 08:51:57   作者:我材不敲代碼  
在日常辦公、開發(fā)運(yùn)維、數(shù)據(jù)處理場(chǎng)景中,文件操作是最高頻的需求之一手動(dòng)操作重復(fù)繁瑣、效率極低,而Python可以通過(guò)內(nèi)置庫(kù)實(shí)現(xiàn)全自動(dòng)化處理,本文將從現(xiàn)代首選pathlib入手,循序漸進(jìn)講解三大庫(kù)的核心用法,搭配可直接運(yùn)行的代碼案例,需要的朋友可以參考下

前言

在日常辦公、開發(fā)運(yùn)維、數(shù)據(jù)處理場(chǎng)景中,文件操作是最高頻的需求之一:批量重命名照片、分類整理文檔、批量壓縮文件夾、清理無(wú)用緩存文件、批量讀寫數(shù)據(jù)文件等。手動(dòng)操作重復(fù)繁瑣、效率極低,而Python可以通過(guò)內(nèi)置庫(kù)實(shí)現(xiàn)全自動(dòng)化處理。

Python文件自動(dòng)化核心依賴三大內(nèi)置庫(kù),無(wú)需額外安裝,開箱即用,覆蓋基礎(chǔ)路徑處理、系統(tǒng)級(jí)操作、高級(jí)批量文件處理全場(chǎng)景,是Python自動(dòng)化必備核心技能。

Python 文件操作三大核心庫(kù)對(duì)比:

對(duì)比維度

pathlib

os

shutil

定位

現(xiàn)代面向?qū)ο舐窂讲僮?/p>

系統(tǒng)級(jí)底層文件/目錄操作

高級(jí)文件批量操作

Python版本

3.4+ 新增

全版本兼容

全版本兼容

代碼風(fēng)格

簡(jiǎn)潔優(yōu)雅、面向?qū)ο?/p>

函數(shù)式、傳統(tǒng)繁瑣

功能聚合、調(diào)用簡(jiǎn)單

核心優(yōu)勢(shì)

路徑處理極簡(jiǎn)、跨平臺(tái)、可讀性強(qiáng)

權(quán)限操作、系統(tǒng)參數(shù)獲取、兼容性強(qiáng)

支持文件夾整體復(fù)制、壓縮、遞歸操作

學(xué)習(xí)難度

推薦場(chǎng)景

日常90%文件路徑操作

系統(tǒng)配置、權(quán)限修改、兼容舊項(xiàng)目

批量復(fù)制、移動(dòng)、壓縮、刪除文件夾

本文將從現(xiàn)代首選pathlib入手,循序漸進(jìn)講解三大庫(kù)的核心用法,搭配可直接運(yùn)行的代碼案例,最后通過(guò)綜合實(shí)戰(zhàn),帶你掌握文件自動(dòng)化全流程開發(fā)。

第一章:核心庫(kù)對(duì)比與環(huán)境準(zhǔn)備

1.1 三大文件庫(kù)定位區(qū)別

很多新手會(huì)混淆os、pathlib、shutil三個(gè)庫(kù),簡(jiǎn)單一句話區(qū)分:

  • pathlib:新時(shí)代文件操作標(biāo)準(zhǔn),替代os.path,專門處理路徑、文件判斷、遍歷、讀寫,代碼極簡(jiǎn)
  • os:系統(tǒng)底層操作,處理目錄創(chuàng)建、刪除、系統(tǒng)環(huán)境、文件權(quán)限,兼容老舊項(xiàng)目
  • shutil:高級(jí)工具庫(kù),彌補(bǔ)os短板,支持整個(gè)文件夾復(fù)制、遞歸刪除、文件壓縮解壓

1.2 環(huán)境與導(dǎo)入方式

三個(gè)庫(kù)均為Python內(nèi)置標(biāo)準(zhǔn)庫(kù),無(wú)需pip安裝,直接導(dǎo)入即可使用:

# 導(dǎo)入三大核心庫(kù)
from pathlib import Path
import os
import shutil

第二章:pathlib —— 現(xiàn)代Python文件操作首選

pathlib采用面向?qū)ο笤O(shè)計(jì),摒棄了os.path繁瑣的字符串拼接方式,跨平臺(tái)兼容性極強(qiáng)(自動(dòng)適配Windows/Linux/Mac路徑分隔符),是目前Python官方推薦的文件操作方式。

2.1 Path路徑創(chuàng)建與解析

支持絕對(duì)路徑、相對(duì)路徑創(chuàng)建,可快速拼接路徑、獲取路徑各層級(jí)信息:

from pathlib import Path

# 1. 創(chuàng)建相對(duì)路徑
p1 = Path("test/file.txt")
# 2. 創(chuàng)建絕對(duì)路徑
p2 = Path("/Users/xxx/Desktop/file.txt")
# 3. 拼接路徑(極簡(jiǎn)寫法,替代字符串拼接)
p3 = Path("test") / "img" / "photo.jpg"

# 路徑信息解析
print("文件名:", p3.name)          # photo.jpg
print("文件后綴:", p3.suffix)      # .jpg
print("純文件名:", p3.stem)        # photo
print("上級(jí)目錄:", p3.parent)      # test/img
print("是否絕對(duì)路徑:", p3.is_absolute())

2.2 路徑判斷與屬性獲取

快速判斷路徑是否存在、是文件還是文件夾,獲取文件大小、修改時(shí)間等屬性:

from pathlib import Path

p = Path("test.jpg")

# 基礎(chǔ)判斷
print("路徑是否存在:", p.exists())
print("是否是文件:", p.is_file())
print("是否是文件夾:", p.is_dir())

# 文件屬性
if p.exists():
    print("文件大小(字節(jié)):", p.stat().st_size)
    print("最后修改時(shí)間:", 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 存在則不報(bào)錯(cuò)

# 2. 創(chuàng)建多級(jí)嵌套目錄
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

# 目標(biāo)文件夾
root = Path("./photos")

# 1. 遍歷當(dāng)前目錄所有文件(不遞歸)
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 文件讀寫極簡(jiǎn)操作

pathlib簡(jiǎn)化了文件讀寫操作,無(wú)需手動(dòng)open/close,代碼更簡(jiǎn)潔:

from pathlib import Path

file = Path("data.txt")

# 寫入內(nèi)容(覆蓋寫入)
file.write_text("Hello Python文件自動(dòng)化!", 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)

# 讀寫二進(jìn)制文件(圖片、視頻等)
img = Path("test.jpg")
img_data = img.read_bytes()

第三章:os模塊 —— 底層系統(tǒng)級(jí)文件操作

os模塊是Python傳統(tǒng)文件操作核心,主打系統(tǒng)層級(jí)操作,適合需要兼容舊項(xiàng)目、修改文件權(quán)限、獲取系統(tǒng)路徑的場(chǎng)景。

3.1 常用路徑與目錄操作

import os

# 獲取當(dāng)前工作目錄
print("當(dāng)前目錄:", os.getcwd())

# 切換工作目錄
os.chdir("./test")

# 創(chuàng)建/刪除目錄
os.mkdir("os_dir")  # 單層目錄
os.makedirs("x/y/z", exist_ok=True)  # 多級(jí)目錄
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)境與文件權(quán)限操作

import os

# 獲取系統(tǒng)環(huán)境變量
print("系統(tǒng)PATH:", os.environ.get("PATH"))

# 修改文件權(quán)限(Linux/Mac生效)
os.chmod("test.txt", 0o755)

# 獲取文件絕對(duì)路徑
abs_path = os.path.abspath("test.txt")
print("絕對(duì)路徑:", abs_path)

3.3 傳統(tǒng)文件遍歷方法

import os

# 遍歷目錄所有文件
for root, dirs, files in os.walk("./test"):
    print("當(dāng)前遍歷目錄:", root)
    print("子文件夾:", dirs)
    print("所有文件:", files)

第四章:shutil —— 高級(jí)文件批量操作工具

os和pathlib無(wú)法直接復(fù)制/移動(dòng)非空文件夾,也不支持壓縮解壓,shutil完美彌補(bǔ)該短板,是批量文件處理的核心工具。

4.1 文件/文件夾復(fù)制與移動(dòng)

import shutil

# 1. 復(fù)制單個(gè)文件
shutil.copy("test.txt", "copy_test.txt")

# 2. 復(fù)制整個(gè)文件夾(包含所有子文件)
shutil.copytree("./src_dir", "./dst_dir", dirs_exist_ok=True)

# 3. 移動(dòng)文件/文件夾
shutil.move("copy_test.txt", "./dst_dir/copy_test.txt")

# 4. 重命名文件
shutil.move("old_name.txt", "new_name.txt")

4.2 批量刪除與遞歸清空

import shutil

# 遞歸刪除整個(gè)文件夾(包含所有文件和子文件夾)
shutil.rmtree("./dst_dir", ignore_errors=True)

4.3 壓縮與解壓文件

import shutil
import zipfile

# 1. 壓縮整個(gè)文件夾為zip
shutil.make_archive("壓縮包", "zip", "./src_dir")

# 2. 解壓zip文件
with zipfile.ZipFile("壓縮包.zip", "r") as zip_ref:
    zip_ref.extractall("./解壓目錄")

第五章:綜合實(shí)戰(zhàn):文件批量自動(dòng)化工具

整合三大庫(kù)核心功能,開發(fā)3個(gè)可直接落地的實(shí)戰(zhàn)腳本,覆蓋日常高頻自動(dòng)化場(chǎng)景。

5.1 實(shí)戰(zhàn)1:批量重命名文件

批量修改文件夾內(nèi)所有圖片名稱,統(tǒng)一格式:序號(hào)+自定義名稱

from pathlib import Path

def batch_rename(folder_path, prefix="風(fēng)景"):
    """批量重命名圖片文件"""
    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 實(shí)戰(zhàn)2:分類整理不同格式文件

自動(dòng)識(shí)別文件后綴,將圖片、文檔、視頻、壓縮包分類歸檔

from pathlib import Path
import shutil

def classify_files(folder_path):
    """文件自動(dòng)分類整理"""
    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 實(shí)戰(zhàn)3:批量壓縮指定目錄文件

import shutil
from datetime import datetime

def zip_folder(folder_path):
    """批量壓縮文件夾,命名帶時(shí)間戳"""
    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")

三大庫(kù)選擇指南與最佳實(shí)踐

業(yè)務(wù)需求

推薦庫(kù)

核心原因

路徑拼接、文件遍歷、批量篩選

pathlib

代碼簡(jiǎn)潔、跨平臺(tái)、可讀性極強(qiáng)

文件讀寫、判斷文件屬性

pathlib

極簡(jiǎn)API,無(wú)需手動(dòng)管理文件句柄

系統(tǒng)環(huán)境獲取、文件權(quán)限修改

os

專屬系統(tǒng)級(jí)操作,無(wú)替代方案

兼容老舊Python項(xiàng)目

os/os.path

低版本Python不支持pathlib

文件夾整體復(fù)制、遞歸刪除

shutil

唯一支持批量文件夾操作的內(nèi)置庫(kù)

文件壓縮、解壓、批量遷移

shutil+zipfile

功能完善、開箱即用

總結(jié)

1、優(yōu)先使用pathlib:日常90%的文件路徑、遍歷、讀寫場(chǎng)景,pathlib都是最優(yōu)選擇,代碼更優(yōu)雅、跨平臺(tái)兼容性更好。

2、os作為補(bǔ)充:僅在需要系統(tǒng)級(jí)操作、兼容舊項(xiàng)目時(shí)使用。

3、shutil處理批量復(fù)雜操作:文件夾復(fù)制、遞歸刪除、壓縮解壓必備。

三者組合使用,可以實(shí)現(xiàn)所有文件自動(dòng)化場(chǎng)景,徹底解放雙手,大幅提升辦公和開發(fā)效率。

以上就是Python使用os、pathlib、shutil實(shí)現(xiàn)文件與目錄自動(dòng)化實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于Python文件與目錄自動(dòng)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python如何做代碼性能分析

    python如何做代碼性能分析

    這篇文章主要介紹了python如何做代碼性能分析,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Flask學(xué)習(xí)筆記之日志操作配置實(shí)例講解

    Flask學(xué)習(xí)筆記之日志操作配置實(shí)例講解

    這篇文章主要為大家介紹了Flask學(xué)習(xí)筆記之日志操作配置實(shí)例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Python中微服務(wù)架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)詳解

    Python中微服務(wù)架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)詳解

    在當(dāng)今軟件開發(fā)領(lǐng)域中,微服務(wù)架構(gòu)已經(jīng)成為了一種流行的設(shè)計(jì)范式,這篇文章主要為大家介紹了如何使用Python語(yǔ)言來(lái)設(shè)計(jì)和實(shí)現(xiàn)微服務(wù)架構(gòu),需要的可以參考一下
    2024-04-04
  • python處理json數(shù)據(jù)中的中文

    python處理json數(shù)據(jù)中的中文

    這篇文章主要介紹了python處理json數(shù)據(jù)中的中文問(wèn)題,需要的朋友可以參考下
    2014-03-03
  • python 對(duì)xml解析的示例

    python 對(duì)xml解析的示例

    這篇文章主要介紹了python 如何對(duì)xml解析,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-02-02
  • 在Python的Django框架中包裝視圖函數(shù)

    在Python的Django框架中包裝視圖函數(shù)

    這篇文章主要介紹了在Python的Django框架中包裝視圖函數(shù)的方法,即requires_login的相關(guān)方法,需要的朋友可以參考下
    2015-07-07
  • python篩選出兩個(gè)文件中重復(fù)行的方法

    python篩選出兩個(gè)文件中重復(fù)行的方法

    這篇文章主要為大家詳細(xì)介紹了python篩選出兩個(gè)文件中重復(fù)行的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 為什么你還不懂得怎么使用Python協(xié)程

    為什么你還不懂得怎么使用Python協(xié)程

    這篇文章主要給大家介紹了關(guān)于為什么你還不懂得怎么使用Python協(xié)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python numpy和matlab的幾點(diǎn)差異介紹

    Python numpy和matlab的幾點(diǎn)差異介紹

    這篇文章主要介紹了Python numpy和matlab的幾點(diǎn)差異,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python實(shí)現(xiàn)批量下載新浪博客的方法

    python實(shí)現(xiàn)批量下載新浪博客的方法

    這篇文章主要介紹了python實(shí)現(xiàn)批量下載新浪博客的方法,涉及Python頁(yè)面抓取的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

巴彦淖尔市| 水富县| 会理县| 孙吴县| 麻城市| 高安市| 尉犁县| 宜宾市| 马边| 伽师县| 横山县| 新津县| 肇州县| 永春县| 金湖县| 鸡西市| 东辽县| 兴和县| 阿合奇县| 宝鸡市| 潼南县| 英德市| 凤凰县| 准格尔旗| 开阳县| 北宁市| 肇州县| 丹棱县| 哈尔滨市| 马鞍山市| 安达市| 巩留县| 清苑县| 清镇市| 花垣县| 太和县| 雷波县| 利川市| 隆昌县| 津市市| 崇阳县|