好用的副檔名分類小程式|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出來。

3會員
14內容數
隨筆是我內心的聲音,隨影是我眼中的記憶。或許,在這個不斷流轉的人生中,它們是我最真實的見證和表達方式。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
Thumbnail
avatar
黑貓老師
2024-06-29
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
avatar
邱品齊皮膚科醫師
2023-04-27
「食」在偉大!「慢讀好食刻」精選116本「食」用美學,適應時節!養生養出好心情,農業AI先進知識、穿著Prada的農婦~「慢讀好食刻」精選116本「食」用美學,主要是由「全國公共圖書館巡迴展」所推出關於美味飲食、健康瘦身、AI農業應用、農產品銷售經濟相關好書書單,探討主題相當多元有趣,個人在一次圖書館取書日常時,剛好看到的好消息分享給大家!
Thumbnail
avatar
Betty's Jump Diary《貝蒂的跳躍日記》
2023-09-22
好書推薦 | 培養理財的富腦袋(人生實用商學院)39歲以下的受訪者,有高達34.8%的人每個月薪水扣掉生活開銷後,幾乎歸零無法儲蓄,也就是所謂的月光族。決定你將來會變成富人或是窮人,其實是“你對金錢的態度”
Thumbnail
avatar
莫非
2023-06-30
職場上班族如何面對快速變化的職場環境?好課推薦!跟著台大醫生吳沛燊,用 15 個學習法則來應付快速變化的職場新任務面對現代職場的快速變化,我們該如何培養一種以不變應萬變的能力?答案就是「學習力」。我有幸參加了一場名為「什麼都學得會!15個高效學習法則,快速上手新能力」的課程,由跨領域專家吳沛燊博士主講。在這堂課中,他分享了如何從不同角度切入,將學習方法落實到個人的職場和生活中。快來和我一起瞭解這堂課的精彩內容,
Thumbnail
avatar
朱騏
2023-04-24
尋找天賦及優勢的好用思維工具(下)在我們努力發掘自我天賦的同時,也許有些人會得到一些喪氣的結論 那就是,別人看起來永遠比自己更有能力、更有天分 每當努力回想的同時,只會發現自己一身的缺點及劣勢 如何看待身上的天賦優勢,也是一個重要課題
Thumbnail
avatar
岱華
2022-10-02
【 活用希塔療癒好神奇!】科學冥想真的可以讓壞掉的電腦復活了!🥳 近期跟學生分享到怎麼跟沒有生命的無機物合作的神奇的案例﹐ 讓大家都立刻想要把家裡的快要壞掉的物品都拿來療癒一下🤣 因為大家對於沒有生命的物品有既定印象就是﹐ 他已經被固定人們認知的形象﹐怎麼可能一個療癒可以改變這個物品他的狀態? 我剛學習希塔療癒的時候也覺得﹐怎麼可能可以幫壞掉的物品療癒變好它?
Thumbnail
avatar
希塔療癒無極限Rainie
2022-10-02
尋找天賦及優勢的好用思維工具(上)認識「天賦」是很抽象的課題, 卻是我們是否能過上幸福人生的一項關鍵指標 而在自媒體書寫中,更是貫串首尾的初衷與熱情來源 我們該如何認識及思考呢?
Thumbnail
avatar
岱華
2022-09-30
好用的馬賽克工具 Redacted 七大特色(附教學)一款稱手的打碼工具:Redacted。摘要它的七大特色,並附上使用說明。
Thumbnail
avatar
閱讀筆耕
2022-06-08
讀完這本書,讓我看完就能立刻用上。好書分享《財富自由的整理鍊金術》作者兩年內斷捨離9成物品,從中回收50萬,隔年33歲達成財富自由 ※適合人群 壓力一大就想買東西「犒賞自己」 家中空間被囤積的雜物占據,又不知道該如何處理 羨慕達成財富自由的人,但又不知道確切該怎麼做
Thumbnail
avatar
小賦婆 little giver
2022-05-14
【ETF研究室-元大高股息(0056)】用對方法,才能享有複利滾存的好處!「複利滾存」相信大家都聽過,但在實際投資操作上若想達到「複利」的效果,需要以「時間」來換取,也要避免被投資的漲跌波動所影響,而放棄了複利的想法,改為短線操作以賺取價差的方式。但這實在不容易,對吧?
Thumbnail
avatar
蔣竣植
2021-03-29