你的桌面是否經常被各種檔案佔滿,看起來雜亂無章,不知從何整理起呢?今天的主題正好能幫你解決這個困擾。
檔案整理器 —— 一個能自動化分類檔案的小工具。透過它,我們不需要再花時間一個一個拖曳檔案,只要設定好規則,它就能依照副檔名或檔案類型,幫忙自動歸類到對應的資料夾。
除了節省時間,檔案整理器最大的優勢是降低遺漏和錯放檔案的機率,特別適合經常需要下載、整理大量檔案的使用者。
接下來,我們一起來看怎麼實作屬於自己的檔案整理小程式,讓桌面不再成為堆積吧!
這次使用了Python內建的os和和Sheil模組來處理作業系統層面的檔案操作。
os:它就像是我們與電腦作業系統溝通的橋樑。
我們可以用它來:
1.讀取資料夾 (os.listdir)
2.檢查路徑是否存在(os.path.exists)
3.判斷是檔案還是資料夾 (os.path.isdir)
4.組合路徑 (os.path.join)
有了這些功能,就能精準地抓到每個檔案的位置。
shutil:這個模組則是搬運小能手!最常用的功能就是移動檔案 shutil.move,可以把檔案從原本亂七八糟的資料夾,直接搬到分類好的新資料夾,整個自動整理的流程就靠它搞定了。
自從上次學會怎麼做 GUI 介面後,我現在幾乎寫程式都離不開它了XD
這次我用到的功能主要有:
import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
file_types = {
'Images': ['.jpg', '.jpeg', '.png', '.gif', '.bmp'],
'Documents': ['.doc', '.docx', '.pdf', '.txt', '.xlsx', '.pptx'],
'Archives': ['.zip', '.rar', '.7z'],
'Videos': ['.mp4', '.avi', '.mov'],
'Audio': ['.mp3', '.wav', '.flac'],
'Code': ['.py', '.js', '.html', '.css', '.c', '.cpp', '.java'],
'Executables': ['.exe', '.dmg', '.pkg']
}
def organize_files(source_folder):
if not os.path.exists(source_folder):
return ["錯誤:指定的資料夾不存在。"]
results = []
created_folders = set()
for filename in os.listdir(source_folder):
file_path = os.path.join(source_folder, filename)
if os.path.isdir(file_path):
continue
file_extension = os.path.splitext(filename)[1].lower()
destination_folder = 'Others'
for folder, extensions in file_types.items():
if file_extension in extensions:
destination_folder = folder
break
target_path = os.path.join(source_folder, destination_folder)
if not os.path.exists(target_path):
os.makedirs(target_path)
if destination_folder not in created_folders:
results.append(f"已建立資料夾:{destination_folder}")
created_folders.add(destination_folder)
try:
shutil.move(file_path, os.path.join(target_path, filename))
results.append(f"已移動檔案:{filename} -> {destination_folder}")
except shutil.Error as e:
results.append(f"移動檔案時出錯 {filename}:{e}")
return results
def organize_files_gui():
source_path = filedialog.askdirectory()
if not source_path:
result_text.set("")
return
result_text.set("開始整理中...\n\n")
root.update_idletasks() # 即時刷新 GUI
move_results = organize_files(source_path)
final_result = "整理結果:\n"
if move_results:
final_result += "\n".join(move_results)
else:
final_result += "沒有找到需要整理的檔案。"
result_text.set(final_result)
messagebox.showinfo("整理完成", "檔案整理已完成!")
if __name__ == "__main__":
root = tk.Tk()
root.title("檔案整理小工具")
root.geometry("400x450")
root.configure(bg="#f0f0f0")
# 操作說明
label = tk.Label(main_frame, text="點擊按鈕選擇資料夾,自動整理檔案。")
label.pack(pady=(0, 15))
# 整理按鈕
organize_button = tk.Button(main_frame, text="選擇資料夾並整理", command=organize_files_gui)
organize_button.pack()
# 離開按鈕
exit_button = tk.Button(main_frame, text="離開程式", command=root.destroy)
exit_button.pack()
# 顯示整理結果
result_text = tk.StringVar()
result_label = tk.Label(result_frame, textvariable=result_text, justify="left", wraplength=320)
result_label.pack()
root.mainloop()
當我把程式碼打包成 .exe 後,發現系統會立即關閉視窗,導致無法確認程式是否執行成功。如果想要再次分類檔案,也必須重新開啟 .exe,使用上就顯得不夠靈活。
為了解決這個問題,我在程式中加入了一個重複迴圈,並結合 GUI 設計,讓使用者只要按下「離開」按鈕,就能觸發 break 跳出迴圈。這樣一來,不僅能保留足夠的時間閱讀程式輸出的訊息,也能在同一個程式執行期間重複使用功能,而不用每次都重新開啟檔案,實用性大大提升!
在最初的版本中,使用者需要手動找到想要整理的資料夾,再將其路徑複製並貼到程式中。這樣的操作不僅繁瑣,還容易因為輸入錯誤而造成程式失敗。
為了解決這個問題,我引入了 tkinter.filedialog 模組,它能直接呼叫作業系統的檔案總管,讓使用者只需要點擊按鈕,就能彈出資料夾選擇視窗。選擇好資料夾後,程式會自動取得路徑並傳回,完全不需要額外複製或貼上。
這樣一來,不但節省了操作時間,也讓整個使用流程更直覺、更不容易出錯!
這次的檔案整理小程式,不只是把檔案整理乾淨,更讓我體驗到程式設計結合使用者思維的樂趣。一鍵整理檔案的功能雖然小巧,但每天使用都能省下不少時間,那種即時的成就感真的很棒!
也讓我深刻感受到,「設計流程」比單純寫程式更重要:先分類檔案類型 → 寫整理函式 → GUI 操作串接 → 處理錯誤 → 顯示結果,每一步都得考慮使用者體驗。總結來說這是一個小巧卻非常實用的專案呢!