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

Python腳本實(shí)現(xiàn)根據(jù)文件擴(kuò)展名進(jìn)行文件自動(dòng)分類

 更新時(shí)間:2025年12月23日 08:49:11   作者:王二哥的技術(shù)筆記  
這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個(gè)腳本,可以實(shí)現(xiàn)根據(jù)文件擴(kuò)展名進(jìn)行文件自動(dòng)分類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

試想一下,有沒(méi)那么一天,你剛剛結(jié)束工作,重新切回電腦桌面上。文檔、圖片、音頻、視頻等各種格式的文件都堆滿了桌面,想要從桌面找到某個(gè)文件,就像從蛋炒飯里將所有蔥花挑出來(lái)一樣困難。

對(duì)于這種情況,我們可以按照文件擴(kuò)展名,或其他的分類方式,分門別類的將文件整理到不同的目錄。方法雖然找到了,但是手動(dòng)操作起來(lái)的也是很不容易的。

所以,我們今天就一起來(lái)學(xué)習(xí)一下,怎么用 Python 腳本,根據(jù)文件擴(kuò)展名自動(dòng)的將文件進(jìn)行分類。

核心思路

實(shí)現(xiàn)自動(dòng)的文件分類功能,核心有兩個(gè)問(wèn)題:如何定義分類規(guī)則?如何執(zhí)行流程?

1、設(shè)計(jì)分類規(guī)則

首先,我們要根據(jù)文件擴(kuò)展名,把文件放到指定的目錄下。這樣的話,我們就需要建議一個(gè)目錄和擴(kuò)展名的映射關(guān)系。

我們使用“字典”作為核心的數(shù)據(jù)結(jié)構(gòu)。其中,目錄名為鍵,擴(kuò)展名的列表為值。

{
    "music": ("mp3", "wav"),
    "movie": ("mp4", "rmvb", "rm", "avi"),
    "execute": ("exe", "bat")
}

2、設(shè)計(jì)執(zhí)行流程

在這個(gè)業(yè)務(wù)場(chǎng)景下,“文件遍歷”和“文件處理”是兩個(gè)可以分離的步驟,但存在速度不匹配的依賴關(guān)系。所以,這里我們借鑒“生產(chǎn)者-消費(fèi)者”這一經(jīng)典的設(shè)計(jì)模式。

  • “生產(chǎn)者”負(fù)責(zé)遍歷目錄下的文件,并將文件信息放入隊(duì)列。
  • “消費(fèi)者”負(fù)責(zé)從隊(duì)列中取出文件,并根據(jù)規(guī)則將其移動(dòng)到正確文件夾。
  • “隊(duì)列”作為生產(chǎn)者和消費(fèi)者之間的緩沖區(qū)域,解耦兩個(gè)過(guò)程,避免相互等待。

“生產(chǎn)者-消費(fèi)者”模式的優(yōu)勢(shì):

1. 如果生產(chǎn)者快,數(shù)據(jù)可暫存于隊(duì)列,生產(chǎn)者無(wú)需等待。

2. 如果消費(fèi)者快,隊(duì)列空時(shí)消費(fèi)者會(huì)等待,直至新數(shù)據(jù)到來(lái)。

3. 平衡了雙方速度差異,提高程序整體健壯性。

代碼實(shí)現(xiàn)

整個(gè)程序主要由以下幾個(gè)函數(shù)構(gòu)成:

1、創(chuàng)建分類目錄

根據(jù)分類規(guī)則字典,在指定目錄下提前創(chuàng)建好分類目錄。

實(shí)現(xiàn)代碼如下:

def make_new_dir(root_dir: Path, dir_names: Iterable):
    for dir_name in dir_names:
        target_dir = root_dir / dir_name
        # mkdir 的 exist_ok=True 參數(shù)會(huì)避免目錄已存在的錯(cuò)誤
        target_dir.mkdir(exist_ok=True)

上面代碼中,root_dir: Path 參數(shù)是一個(gè)根路徑,dir_names: Iterable 參數(shù)是一個(gè)分類目錄集合。

2、生產(chǎn)者:遍歷目錄并寫入隊(duì)列

使用 root_dir.iterdir() 方法遍歷源目錄,將每個(gè)子文件存入隊(duì)列。

實(shí)現(xiàn)代碼如下:

def write_to_q(root_dir: Path, q: Queue):
?
    for file_path in root_dir.iterdir():
        if file_path.is_file():
            print(f"write_to_q... Adding {file_path.resolve()}")
            q.put(file_path.resolve())

3、消費(fèi)者:獲取隊(duì)列中的文件信息,并移動(dòng)文件

從隊(duì)列中取出數(shù)據(jù),解析出文件路徑,然后調(diào)用函數(shù)進(jìn)行處理。

實(shí)現(xiàn)代碼如下:

def classify_from_q(q: Queue, type_to_classify: dict):
    dir_map = build_extension_to_dir(type_to_classify)
    print(f"classify_from_q... Starting... with a total of {q.qsize()} files.")
    while not q.empty():
        filepath: Path = q.get()
        print(f"classify_from_q... Getting {filepath}")
        file_suffix = filepath.suffix.lstrip(".")
        dir_name = dir_map.get(file_suffix)
        if dir_name:
            target_filepath = filepath.parent / dir_name / filepath.name
            move_new_dir(filepath, target_filepath)
?
        # 休息一下
        sleep(0.5)
?
?
def move_new_dir(source_filepath: Path, target_filepath: Path):
    # 確保目標(biāo)目錄存在
    target_filepath.parent.mkdir(parents=True, exist_ok=True)
?
    # 移動(dòng)文件
    source_filepath.rename(target_filepath)
    print(f"move_new_dir... File moved successfully... {source_filepath} --> {target_filepath}")
?
?
def build_extension_to_dir(file_types: dict):
    extension_to_dir = {}
    for dir_name, extensions in file_types.items():
        for ext in extensions:
            extension_to_dir[ext] = dir_name
?
    print(f"build_extension_to_dir... {extension_to_dir}")
    return extension_to_dir

classify_from_q 函數(shù)消費(fèi)隊(duì)列中的文件信息,并構(gòu)建執(zhí)行流程。

move_new_dir 函數(shù)實(shí)現(xiàn)了文件移動(dòng)功能。

build_extension_to_dir 函數(shù)實(shí)現(xiàn)了反向字典查找功能,構(gòu)建一個(gè)根據(jù)擴(kuò)展名查詢分類目錄的字典。

# 構(gòu)建字典
file_types = {
    "music": ("mp3", "wav"),
    "movie": ("mp4", "rmvb", "rm", "avi"),
    "execute": ("exe", "bat")
}
?
# 構(gòu)建出的反向查找字典
{
    'mp3': 'music', 
    'wav': 'music', 
    'mp4': 'movie', 
    'rmvb': 'movie', 
    'rm': 'movie', 
    'avi': 'movie', 
    'exe': 'execute', 
    'bat': 'execute'
}

總結(jié)

今天,我們不僅學(xué)會(huì)了一個(gè)自動(dòng)整理文件的Python腳本,更體驗(yàn)了如何用編程思維解決實(shí)際問(wèn)題。

面對(duì)復(fù)雜任務(wù)時(shí), “拆分功能”“模式復(fù)用” 是關(guān)鍵一步。通過(guò)函數(shù)封裝每個(gè)步驟,再借助經(jīng)典的生產(chǎn)者-消費(fèi)者模式組合流程,代碼變得清晰、健壯,更容易應(yīng)對(duì)未來(lái)更復(fù)雜的需求。

這才是高效辦公的真諦:不是拼命手動(dòng)操作,而是讓機(jī)器自動(dòng)工作,把精力留給真正重要的思考。

到此這篇關(guān)于Python腳本實(shí)現(xiàn)根據(jù)文件擴(kuò)展名進(jìn)行文件自動(dòng)分類的文章就介紹到這了,更多相關(guān)Python文件分類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python將Excel轉(zhuǎn)換為HTML的代碼詳解

    使用Python將Excel轉(zhuǎn)換為HTML的代碼詳解

    在企業(yè)數(shù)據(jù)管理與信息分享場(chǎng)景中,Excel文件雖然功能強(qiáng)大,但在跨平臺(tái)瀏覽、在線展示和快速分享方面存在局限性,然而,手動(dòng)將Excel轉(zhuǎn)換為 HTML 不僅操作繁瑣,還難以保持原有的格式,所以本文將介紹如何使用Python將Excel工作表或整個(gè)工作簿轉(zhuǎn)換為HTML格式
    2026-06-06
  • Python中type()函數(shù)的具體使用

    Python中type()函數(shù)的具體使用

    在Python中,type()函數(shù)是一個(gè)非常有用的工具,它可以查看變量或?qū)ο蟮臄?shù)據(jù)類型,本文主要介紹了Python中type()函數(shù)的具體使用,感興趣的可以一起來(lái)了解一下
    2024-01-01
  • python中的selenium安裝的步驟(瀏覽器自動(dòng)化測(cè)試框架)

    python中的selenium安裝的步驟(瀏覽器自動(dòng)化測(cè)試框架)

    這篇文章主要介紹了python中的selenium安裝的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 樹莓派安裝OpenCV3完整過(guò)程的實(shí)現(xiàn)

    樹莓派安裝OpenCV3完整過(guò)程的實(shí)現(xiàn)

    這篇文章主要介紹了樹莓派安裝OpenCV3完整過(guò)程的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的封裝與繼承用法示例

    Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的封裝與繼承用法示例

    這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的封裝與繼承用法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類的封裝、繼承相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • Python根據(jù)當(dāng)前日期取去年同星期日期

    Python根據(jù)當(dāng)前日期取去年同星期日期

    最近做項(xiàng)目,遇到這樣的業(yè)務(wù)開發(fā)需求,需要對(duì)比當(dāng)前時(shí)間段和去年同星期的時(shí)間段的數(shù)據(jù),下面小編通過(guò)實(shí)例代碼給大家分享Python根據(jù)當(dāng)前日期取去年同星期日期,需要的朋友參考下
    2019-04-04
  • python字符串常用方法

    python字符串常用方法

    這篇文章主要介紹了python字符串常用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • python計(jì)算兩個(gè)地址之間的距離方法

    python計(jì)算兩個(gè)地址之間的距離方法

    今天小編就為大家分享一篇python計(jì)算兩個(gè)地址之間的距離方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python 調(diào)用有道api接口的方法

    python 調(diào)用有道api接口的方法

    今天小編就為大家分享一篇python 調(diào)用有道api接口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Numpy數(shù)組的廣播機(jī)制的實(shí)現(xiàn)

    Numpy數(shù)組的廣播機(jī)制的實(shí)現(xiàn)

    這篇文章主要介紹了Numpy數(shù)組的廣播機(jī)制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

黎川县| 泽州县| 江口县| 涞水县| 襄汾县| 天津市| 富源县| 崇州市| 松江区| 长兴县| 松江区| 乐至县| 恩平市| 高淳县| 日土县| 双峰县| 隆化县| 漯河市| 连南| 托克逊县| 营口市| 宁远县| 千阳县| 镇雄县| 汉沽区| 迁安市| 睢宁县| 望江县| 武义县| 淮阳县| 平阴县| 颍上县| 祁门县| 栾城县| 都江堰市| 汕头市| 慈利县| 巴青县| 萨迦县| 遵义县| 沛县|