好用的副檔名分類小程式|Python

更新 發佈閱讀 7 分鐘
包容一切的海洋

包容一切的海洋


自從拿到相機後一直有個困擾,每次出門拍了很多照片,回來後除了初步挑選照片,將拍壞的照片刪除之外,再來就是將照片依照自己想要的方式歸檔。

平時拍照我都是拍攝RAW+JPG兩種格式的檔案,而相機拍攝完成存入記憶卡都是將這兩種格式放在同一個資料夾,回來後初步挑選完照片還要先分類出RAW檔與JPG檔,接著按照個人習慣年、月、日來分類照片......,每次回來的分類就要做一大堆步驟,有一天突然想著要是電腦可以自動幫我完成就好了,於是這隻小程式就誕生了。

我說的分類格式大概就像是下面這種檔案結構:

D:\Photo>tree /F
D:.
├─2022
└─2023
├─07
│ └─23
│ ├─jpg
│ │ 123.JPG
│ │
│ └─raf
222.raf
└─09
├─16
│ ├─jpg
│ │ 1.JPG
│ │ 2.JPG
│ │
│ └─raf
1.RAF
2.RAF

└─24
├─jpg
20230924.JPG

└─raf
20230924.RAF

這樣以後要找照片就會很方便,整整齊齊看的也開心,但是如果是手動的話,要新增好多個資料夾,最後還得自己移動照片到對應資料夾,實在太花時間了。所以才想說做個簡單的小程式來幫我處理這些動作,接著就稍微講解一下。

首先,導入我們需要的模組:

import os 
import shutil
from pathlib import Path
from datetime import datetime
from tkinter import filedialog

都是一些Python本來就內建的模組,不需要額外安裝。os用來抓取檔案最後修改時間的timestamp,就是依據這個來建立年月日階層資料夾;shutil進行檔案的移動;pathlib來操作路徑;利用datetimefromtimestamp函數來將os所抓取到的最後修改時間的timestamp轉換成日期物件;最後導入tkinterfiledialog函數來讓我們可以選擇指定的資料夾。

導入完模組後,接著讓我們寫一個移動檔案的函數:

# 將文件按照修改日期分類並移動到目標資料夾的函數
def categorize_files(file_list, dest_folder, file_extension):
    count = 0
    for file in file_list:
        modification_time = datetime.fromtimestamp(os.path.getmtime(file))
        year = modification_time.year
        month = modification_time.month
        day = modification_time.day

        # 創建目標資料夾的路徑,按照年月日層級
        file_path = dest_folder / str(year) / str(month).zfill(2) / str(day).zfill(2) / file_extension

        if not file_path.exists():
            file_path.mkdir(parents=True)

        # 移動文件到目標路徑
        shutil.move(file, file_path / file.name)
        count += 1

    return count

接下來這段就是我們的主要函數啦,

def main(source_dir, target_dir, extensions):
    dir1, dir2 = source_dir, target_dir

    if not dir1 or not dir2 or not extensions:
        print("請指定來源資料夾、目標資料夾和至少一個副檔名。")
        return

    # 遍歷選定的副檔名列表
    for ext in extensions:
        file_extension = ext.lower()
        path1, path2 = Path(dir1), Path(dir2)

        # 獲取來源資料夾中符合副檔名的文件列表
        file_list = list(path1.glob(f'*.{file_extension}'))

        if not file_list:
            print(f"未找到{file_extension}格式的文件,請重新輸入正確的選擇。")
            continue

        # 調用categorize_files函數,將文件按照修改日期分類並移動到目標資料夾
        count = categorize_files(file_list, path2, file_extension)
        print(f"完成!!一共有 {count}{file_extension}格式的文件被移動")

if __name__ == "__main__":
    source_dir = filedialog.askdirectory(title="選擇來源資料夾")
    target_dir = filedialog.askdirectory(title="選擇目標資料夾")
    extensions = input("請輸入要移動的副檔名,用空格分隔:").split()
    main(source_dir, target_dir, extensions)

執行的時候就會跳出要請我們選擇資料夾的畫面,只要選擇需要分類的資料夾,與想移動到的資料夾以及輸入想移動的附檔名,程式就會自動按照檔案的最後修改日期來進行年月日階層的建立資料夾與移動檔案,並在最後告訴你總共有幾個檔案被移動,是不是很方便!

後續我也利用了tkinter建出一個簡單的GUI介面方便使用,相比上面那段程式,也不用自己打副檔名了,滑鼠點點就可以操作,也能夠新增或移除預設的副檔名!雖然樣貌有點陽春,但功能還是有的!

不知道為甚麼字糊糊的感覺...

不知道為甚麼字糊糊的感覺...

改天再來分享一下如何製作GUI出來。

留言
avatar-img
拾憶路上
11會員
26內容數
隨筆是我內心的聲音,隨影是我眼中的記憶。或許,在這個不斷流轉的人生中,它們是我最真實的見證和表達方式。
拾憶路上的其他內容
2024/11/28
選定好發行版後終於進入安裝的階段了!Linux安裝說簡單也很簡單,但也有複雜的安裝方式。從一開始學習Linux可以從虛擬機器(Virtual Machine)下手,讓你可以在不破壞現有系統的情況下體驗Linux。 接下來會安裝Ubuntu Server來作為學習Linux的第一步。
Thumbnail
2024/11/28
選定好發行版後終於進入安裝的階段了!Linux安裝說簡單也很簡單,但也有複雜的安裝方式。從一開始學習Linux可以從虛擬機器(Virtual Machine)下手,讓你可以在不破壞現有系統的情況下體驗Linux。 接下來會安裝Ubuntu Server來作為學習Linux的第一步。
Thumbnail
2024/11/14
當你打開瀏覽器,迫不及待開始搜尋「Linux」想要進入開源的世界,結果!數不清的發行版本不斷冒出來,瞬間讓你感到腦袋爆炸,馬上就想要把視窗關掉,心想還是乖乖的繼續用Windows好了......。 等等,這篇文章會帶你簡單了解一些主流 Linux 發行版,以及它們的特色,讓你在選擇時不會崩潰。
Thumbnail
2024/11/14
當你打開瀏覽器,迫不及待開始搜尋「Linux」想要進入開源的世界,結果!數不清的發行版本不斷冒出來,瞬間讓你感到腦袋爆炸,馬上就想要把視窗關掉,心想還是乖乖的繼續用Windows好了......。 等等,這篇文章會帶你簡單了解一些主流 Linux 發行版,以及它們的特色,讓你在選擇時不會崩潰。
Thumbnail
2024/11/07
這篇文章將探討Linux的特性、優勢與劣勢以及到底甚麼是Linux。還會與其他主流作業系統進行比較,希望讓大家了解這個極具魅力的作業系統(笑。
Thumbnail
2024/11/07
這篇文章將探討Linux的特性、優勢與劣勢以及到底甚麼是Linux。還會與其他主流作業系統進行比較,希望讓大家了解這個極具魅力的作業系統(笑。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
最近AI的産圖越來越多,是時候開始整理了,隨機生成的廢圖基本上都清除了,剩下一堆感覺不差的挑一挑,只是數量有點多。
Thumbnail
最近AI的産圖越來越多,是時候開始整理了,隨機生成的廢圖基本上都清除了,剩下一堆感覺不差的挑一挑,只是數量有點多。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
在這篇文章中,我們將分享拍攝過程中的主視覺,以及拍攝過程中的靈感和挑戰。同時,我們將介紹徵件的詳細資訊和期限。期待大家的參與和精彩作品的展出。
Thumbnail
在這篇文章中,我們將分享拍攝過程中的主視覺,以及拍攝過程中的靈感和挑戰。同時,我們將介紹徵件的詳細資訊和期限。期待大家的參與和精彩作品的展出。
Thumbnail
感謝꒰ 𝗩𝗼𝗹𝗰𝗮𝗻𝗼 𝗦𝘁𝘂𝗱𝗶𝗼 韓式自助寫真 ꒱的邀請~ 我是一個不喜歡拍照的人,面對鏡頭總是尷尬癌上身,拍不出滿意的照片,又不好意思麻煩攝影師或朋友一直重拍~ 如果你也有這種困擾,非常推薦來 𝗩𝗼𝗹𝗰𝗮𝗻𝗼 𝗦𝘁𝘂𝗱𝗶𝗼 韓式自
Thumbnail
感謝꒰ 𝗩𝗼𝗹𝗰𝗮𝗻𝗼 𝗦𝘁𝘂𝗱𝗶𝗼 韓式自助寫真 ꒱的邀請~ 我是一個不喜歡拍照的人,面對鏡頭總是尷尬癌上身,拍不出滿意的照片,又不好意思麻煩攝影師或朋友一直重拍~ 如果你也有這種困擾,非常推薦來 𝗩𝗼𝗹𝗰𝗮𝗻𝗼 𝗦𝘁𝘂𝗱𝗶𝗼 韓式自
Thumbnail
找到喜歡的事物,拍出喜歡的感覺
Thumbnail
找到喜歡的事物,拍出喜歡的感覺
Thumbnail
不知道已經有多久沒有將相片拿在手上觀看了。 隨著數位相機的發展,照片自然而然也從紙張變成從數位裝置上觀看。 但偶爾還是會有想將相片列印出來的衝動,尤其是拍到一張非常喜歡的照片時。 除了傳統的相館,現在連便利商店也可以印照片, 但對想隨時將手機裡的照片,或者偶爾想從相機拍的照片中列印幾張出
Thumbnail
不知道已經有多久沒有將相片拿在手上觀看了。 隨著數位相機的發展,照片自然而然也從紙張變成從數位裝置上觀看。 但偶爾還是會有想將相片列印出來的衝動,尤其是拍到一張非常喜歡的照片時。 除了傳統的相館,現在連便利商店也可以印照片, 但對想隨時將手機裡的照片,或者偶爾想從相機拍的照片中列印幾張出
Thumbnail
攝影作品的排序方法對於展示、出版造成重要影響,本篇分享了五種排序分類,包括故事發展排序、圖像學排序、詩一樣排序、拍攝時間排序和檔案排序。這些排序方式針對不同的作品和用途,提供了不同的展示方式和意義。
Thumbnail
攝影作品的排序方法對於展示、出版造成重要影響,本篇分享了五種排序分類,包括故事發展排序、圖像學排序、詩一樣排序、拍攝時間排序和檔案排序。這些排序方式針對不同的作品和用途,提供了不同的展示方式和意義。
Thumbnail
拍照後,請把照片原檔用雲端硬碟或相簿,分享超連結給我 拍照請用手機內建軟體拍,不要用社群媒體的(例如FB、Line) 因為FB會把畫質壓縮的變形,像縮圖一樣,手機上看可以,但桌機大螢幕看,就有朦朧美(會影響判讀),更遑論如果需要印出來了(例如媽媽手冊等證明文件)。
Thumbnail
拍照後,請把照片原檔用雲端硬碟或相簿,分享超連結給我 拍照請用手機內建軟體拍,不要用社群媒體的(例如FB、Line) 因為FB會把畫質壓縮的變形,像縮圖一樣,手機上看可以,但桌機大螢幕看,就有朦朧美(會影響判讀),更遑論如果需要印出來了(例如媽媽手冊等證明文件)。
Thumbnail
你是否有過這樣的經驗?拍了一張美美的照片,當下看起來很滿意,但事後放大一看,卻發現照片模糊不清楚?如果你也有這樣的困擾,那麼這篇文章絕對適合你!
Thumbnail
你是否有過這樣的經驗?拍了一張美美的照片,當下看起來很滿意,但事後放大一看,卻發現照片模糊不清楚?如果你也有這樣的困擾,那麼這篇文章絕對適合你!
Thumbnail
自從拿到相機後一直有個困擾,每次出門拍了很多照片,回來後除了初步挑選照片,將拍壞的照片刪除之外,再來就是將照片依照自己想要的方式歸檔。
Thumbnail
自從拿到相機後一直有個困擾,每次出門拍了很多照片,回來後除了初步挑選照片,將拍壞的照片刪除之外,再來就是將照片依照自己想要的方式歸檔。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News