好用的副檔名分類小程式|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會員
19Content count
隨筆是我內心的聲音,隨影是我眼中的記憶。或許,在這個不斷流轉的人生中,它們是我最真實的見證和表達方式。
留言0
查看全部
發表第一個留言支持創作者!
隨筆,隨影 的其他內容
最近剛好在試著研究Python的虛擬環境,今天就來稍稍筆記一下。 在之前我其實也一直搞不懂這個,直到前陣子好好靜下心研究研究後有些心得。 在 Python 開發中,經常需要建立虛擬環境,來隔離不同專案所需的套件及依賴關係。這樣可以確保每個專案使用的套件版本都是一致的,避免可能的衝突和混淆。
自然圈農場,從幾年前露營興盛起來的時候就一直有聽過這個名字,我一直聽到人們超級推薦這個地方,每個人分享的照片也都很好看,看得我心癢癢的很想親自看看,無奈實在是太難訂了,後來也忘了這回事。
毫無計畫的一天,想說找個地方待著可以順道騎車吹吹風,這時候就慶幸平常有在收集口袋名單。翻了翻名單後,我鎖定了一間咖啡廳。
一個月前的某一天,平凡的日常中,在電視上看到一個露營節目,我隨口對著身旁一起看電視的老姊說了句:「要不要去試試看露營?」「喔好啊。」她竟然意外的答應了,不過心想她應該不會當真。
嘿!這週想分享一下我第一次的獨自旅行經驗。 老實說,在出發之前,我對於面對孤獨感和未知的旅程感到有些緊張,雖然平時我常常獨自一人到處走走,心裡想著不就是獨自出遊嗎?但這次的過夜旅程對我來說還是一個全新的挑戰。我之前總是告訴自己,只是一個人的旅行嘛,應該沒什麼大不了的。
最近剛好在試著研究Python的虛擬環境,今天就來稍稍筆記一下。 在之前我其實也一直搞不懂這個,直到前陣子好好靜下心研究研究後有些心得。 在 Python 開發中,經常需要建立虛擬環境,來隔離不同專案所需的套件及依賴關係。這樣可以確保每個專案使用的套件版本都是一致的,避免可能的衝突和混淆。
自然圈農場,從幾年前露營興盛起來的時候就一直有聽過這個名字,我一直聽到人們超級推薦這個地方,每個人分享的照片也都很好看,看得我心癢癢的很想親自看看,無奈實在是太難訂了,後來也忘了這回事。
毫無計畫的一天,想說找個地方待著可以順道騎車吹吹風,這時候就慶幸平常有在收集口袋名單。翻了翻名單後,我鎖定了一間咖啡廳。
一個月前的某一天,平凡的日常中,在電視上看到一個露營節目,我隨口對著身旁一起看電視的老姊說了句:「要不要去試試看露營?」「喔好啊。」她竟然意外的答應了,不過心想她應該不會當真。
嘿!這週想分享一下我第一次的獨自旅行經驗。 老實說,在出發之前,我對於面對孤獨感和未知的旅程感到有些緊張,雖然平時我常常獨自一人到處走走,心裡想著不就是獨自出遊嗎?但這次的過夜旅程對我來說還是一個全新的挑戰。我之前總是告訴自己,只是一個人的旅行嘛,應該沒什麼大不了的。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
「慢讀好食刻」精選116本「食」用美學,主要是由「全國公共圖書館巡迴展」所推出關於美味飲食、健康瘦身、AI農業應用、農產品銷售經濟相關好書書單,探討主題相當多元有趣,個人在一次圖書館取書日常時,剛好看到的好消息分享給大家!
Thumbnail
39歲以下的受訪者,有高達34.8%的人每個月薪水扣掉生活開銷後,幾乎歸零無法儲蓄,也就是所謂的月光族。決定你將來會變成富人或是窮人,其實是“你對金錢的態度”
Thumbnail
面對現代職場的快速變化,我們該如何培養一種以不變應萬變的能力?答案就是「學習力」。我有幸參加了一場名為「什麼都學得會!15個高效學習法則,快速上手新能力」的課程,由跨領域專家吳沛燊博士主講。在這堂課中,他分享了如何從不同角度切入,將學習方法落實到個人的職場和生活中。快來和我一起瞭解這堂課的精彩內容,
Thumbnail
在我們努力發掘自我天賦的同時,也許有些人會得到一些喪氣的結論 那就是,別人看起來永遠比自己更有能力、更有天分 每當努力回想的同時,只會發現自己一身的缺點及劣勢 如何看待身上的天賦優勢,也是一個重要課題
Thumbnail
近期跟學生分享到怎麼跟沒有生命的無機物合作的神奇的案例﹐ 讓大家都立刻想要把家裡的快要壞掉的物品都拿來療癒一下🤣 因為大家對於沒有生命的物品有既定印象就是﹐ 他已經被固定人們認知的形象﹐怎麼可能一個療癒可以改變這個物品他的狀態? 我剛學習希塔療癒的時候也覺得﹐怎麼可能可以幫壞掉的物品療癒變好它?
Thumbnail
認識「天賦」是很抽象的課題, 卻是我們是否能過上幸福人生的一項關鍵指標 而在自媒體書寫中,更是貫串首尾的初衷與熱情來源 我們該如何認識及思考呢?
Thumbnail
一款稱手的打碼工具:Redacted。摘要它的七大特色,並附上使用說明。
Thumbnail
作者兩年內斷捨離9成物品,從中回收50萬,隔年33歲達成財富自由 ※適合人群 壓力一大就想買東西「犒賞自己」 家中空間被囤積的雜物占據,又不知道該如何處理 羨慕達成財富自由的人,但又不知道確切該怎麼做
Thumbnail
「複利滾存」相信大家都聽過,但在實際投資操作上若想達到「複利」的效果,需要以「時間」來換取,也要避免被投資的漲跌波動所影響,而放棄了複利的想法,改為短線操作以賺取價差的方式。但這實在不容易,對吧?
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
「慢讀好食刻」精選116本「食」用美學,主要是由「全國公共圖書館巡迴展」所推出關於美味飲食、健康瘦身、AI農業應用、農產品銷售經濟相關好書書單,探討主題相當多元有趣,個人在一次圖書館取書日常時,剛好看到的好消息分享給大家!
Thumbnail
39歲以下的受訪者,有高達34.8%的人每個月薪水扣掉生活開銷後,幾乎歸零無法儲蓄,也就是所謂的月光族。決定你將來會變成富人或是窮人,其實是“你對金錢的態度”
Thumbnail
面對現代職場的快速變化,我們該如何培養一種以不變應萬變的能力?答案就是「學習力」。我有幸參加了一場名為「什麼都學得會!15個高效學習法則,快速上手新能力」的課程,由跨領域專家吳沛燊博士主講。在這堂課中,他分享了如何從不同角度切入,將學習方法落實到個人的職場和生活中。快來和我一起瞭解這堂課的精彩內容,
Thumbnail
在我們努力發掘自我天賦的同時,也許有些人會得到一些喪氣的結論 那就是,別人看起來永遠比自己更有能力、更有天分 每當努力回想的同時,只會發現自己一身的缺點及劣勢 如何看待身上的天賦優勢,也是一個重要課題
Thumbnail
近期跟學生分享到怎麼跟沒有生命的無機物合作的神奇的案例﹐ 讓大家都立刻想要把家裡的快要壞掉的物品都拿來療癒一下🤣 因為大家對於沒有生命的物品有既定印象就是﹐ 他已經被固定人們認知的形象﹐怎麼可能一個療癒可以改變這個物品他的狀態? 我剛學習希塔療癒的時候也覺得﹐怎麼可能可以幫壞掉的物品療癒變好它?
Thumbnail
認識「天賦」是很抽象的課題, 卻是我們是否能過上幸福人生的一項關鍵指標 而在自媒體書寫中,更是貫串首尾的初衷與熱情來源 我們該如何認識及思考呢?
Thumbnail
一款稱手的打碼工具:Redacted。摘要它的七大特色,並附上使用說明。
Thumbnail
作者兩年內斷捨離9成物品,從中回收50萬,隔年33歲達成財富自由 ※適合人群 壓力一大就想買東西「犒賞自己」 家中空間被囤積的雜物占據,又不知道該如何處理 羨慕達成財富自由的人,但又不知道確切該怎麼做
Thumbnail
「複利滾存」相信大家都聽過,但在實際投資操作上若想達到「複利」的效果,需要以「時間」來換取,也要避免被投資的漲跌波動所影響,而放棄了複利的想法,改為短線操作以賺取價差的方式。但這實在不容易,對吧?