女朋友桌面文件雜亂無章?氣得我用Python給她做了一個文件整理工具
先看效果圖
寫在前面
文件整理功能
實現 GUI 界面
設置界面主題樣式
添加選擇路徑組件及功能實現
添加“整理”,“撤銷”組件及功能實現
添加輸出框顯示運行后的信息
設置各個組件在界面的位置
源碼打包
寫在前面
事情是這樣子的,昨天回去無意看了一下女朋友桌面,密密麻麻的全是文件,各式各樣的占滿屏幕,簡直要把我這個強迫癥給難受死,讓她整理一下,還懶的整理。
于是中午沒休息寫了一個文件整理工具給這個懶豬,希望她能夠識抬舉,給我點獎勵~哈哈
廢話不多說,進入正題!
主要涉及到的庫:
tkinter:實現 GUI 編程(文本框、按鈕、標簽等組件實現 GUI 開發)。
pathlib:面向對象的編程方式來表示文件系統路徑。
ttkthemes:tkinter 主題包,讓你的組件外觀更加騷。
Pyinstaller:是一個非常簡單的打包 .py 文件的庫。
文件整理功能
本文實現的文件整理實際是一種文件分類的功能,將指定文件夾下的文件進行分類,并移動到該類別的文件夾下。
首先需要定義一個文件類型的字典,來指定每個類別文件有哪些。
FILE_TYPE = { "圖片": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg", ".heif", ".psd", ".raw"], "視頻": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng", ".qt", ".mpg", ".mpeg", ".3gp", ".mkv"], "文檔": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods", ".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox", ".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt", "pptx",".csv",",pdf", ], "壓縮文件": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z", ".dmg", ".rar", ".xar", ".zip"], "影音": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3", ".msv", ".ogg", ".oga", ".raw", ".vox", ".wav", ".wma"], "編程": [".py",".html5", ".html", ".htm", ".xhtml",".c",".cpp",".java",".css", ".ipynb", ".h", '.class'], "可執行程序": [".exe"], }
整體代碼的邏輯十分簡單:遍歷指定文件夾下的文件,忽略文件夾,只獲取文件,判斷文件類型是否在文件夾中出現,如果出現則移動到指定文件夾中(不存在文件夾則創建),否則歸類到其他文件中。
from pathlib import Path dir_path = r'C:\Users\pc\Desktop\test' # 遍歷指定文件夾下的文件,忽略文件夾 for file_path in Path(dir_path).glob('*.*'): temp = 0 # 標志是否已經通過FILE_TYPE分類 for key, value in FILE_TYPE.items(): if file_path.suffix in value: sub_dir = Path(dir_path, key) # 某類文件夾路徑 if not sub_dir.exists(): sub_dir.mkdir(exist_ok=True) # 創建文件夾 file_path.rename(Path(sub_dir, file_path.name)) # 移動文件 temp = 1 break if temp == 0: sub_dir = Path(dir_path, '其他文件') if not sub_dir.exists(): sub_dir.mkdir(exist_ok=True) # 創建保存沒有被識別文件的文件夾 file_path.rename(Path(sub_dir, file_path.name)) # 移動文件
實現 GUI 界面
實現 GUI 界面時在原有功能上添加了一個還原按鈕,能夠撤銷文件整理的操作。
設置界面主題樣式
window = ThemedTk(theme="adapta", fonts=True, themebg=True)
自定義 Label 樣式
label_style = ttk.Style() label_style.configure("Label", font=("微軟雅黑", 22, 'bold'), foreground="red", background="yellow")
添加 Label 標簽,并使用自定義的樣式
# 添加標簽 label = tk.Label(window, text='?向日葵的專屬 sun?', style='Label')
添加選擇路徑組件及功能實現
# 設置選擇路徑組件 path = tk.StringVar() entry = ttk.Entry(window, textvariable=path, width=30) button1 = ttk.Button(window,width=10, text = "選擇路徑", command = selectPath)
點擊 “選擇路徑” 按鈕,執行 selectPath() 函數,將選擇的文件夾路徑傳遞給 entry 來顯示在界面上
def selectPath(): global dir_path # 選擇文件path接收文件地址 dir_path = filedialog.askdirectory(title='選擇待整理的文件夾') # 通過replace函數替換絕對文件地址中的/來使文件可被程序讀取 dir_path.replace("/", r"\\") path.set(dir_path)
添加“整理”,“撤銷”組件及功能實現
# 添加“整理”按鈕 button2 = ttk.Button(window,width=10, text = "整理", command = organize_files) # 添加“還原”按鈕 button3 = ttk.Button(window,width=10, text = "還原", command = cancle_organize)
點擊“整理”按鈕,執行 organize_files() 函數,實現文件整理,并記錄文件原路徑與新路徑,同時也要記錄新創建的文件夾路徑,因為還原操作時要將新創建的文件夾進行刪除。
def organize_files(): if dir_path == '': tree.heading("#0", text="還未選取路徑哦") return None global organize_temp organize_temp = 1 # 遍歷指定文件夾下的文件,忽略文件夾 for file_path in Path(dir_path).glob('*.*'): temp = 0 # 標志是否已經通過FILE_TYPE繼續分類 for key, value in FILE_TYPE.items(): if file_path.suffix in value: sub_dir = Path(dir_path, key) # 某類文件夾路徑 if not sub_dir.exists(): sub_dir.mkdir(exist_ok=True) # 創建文件夾 create_dir_path.append(sub_dir) file_path.rename(Path(sub_dir, file_path.name)) # 移動文件 old_file_path[Path(sub_dir, file_path.name)] = file_path temp = 1 break if temp == 0: sub_dir = Path(dir_path, '其他文件') if not sub_dir.exists(): sub_dir.mkdir(exist_ok=True) # 創建保存沒有被識別文件的文件夾 create_dir_path.append(sub_dir) file_path.rename(Path(sub_dir, file_path.name)) # 移動文件 old_file_path[Path(sub_dir, file_path.name)] = file_path tree.heading("#0", text="整理完成")
點擊“還原”按鈕,執行 cancle_organize() 函數,還原文件至整理之前
def cancle_organize(): if organize_temp == 0: tree.heading("#0", text="還未整理哦") return None for new_path, old_path in old_file_path.items(): new_path.rename(old_path) # 還原文件 for dir_path in create_dir_path: dir_path.rmdir() # 不能使用unlink()來刪除,報錯無權限 tree.heading("#0", text="還原成功")
添加輸出框顯示運行后的信息
# 添加輸出框顯示 tree = ttk.Treeview(height=1, show=("tree", "headings"))
設置各個組件在界面的位置
# 設置組件位置 label.grid(row=0, column=0, padx=20, pady=40) entry.grid(row = 3, column = 0, pady=5) button1.grid(row = 3, column = 1, padx=20) button2.grid(row = 4, column = 0, pady=5) button3.grid(row = 5, column = 0, pady=5) tree.grid(row=6, column=0, pady=5)
至此,一個文件整理的小工具就已經實現了。整體界面如下:
源碼打包
首先要確保已經安裝 pyinstaller,沒有安裝的可以先安裝一下。
pip install -i https://pypi.douban.com/simple pyinstaller
pyinstaller 使用時的常用參數含義:
-F:打包單個文件,產生一個文件用于部署(默認),如果代碼都寫在一個 .py 文件時使用,項目有多個文件時不要使用
pyinstaller -F xxx.py
-D:打包多個文件,產生一個目錄用于部署(默認),用于框架編寫的代碼打包
pyinstaller -D xxx.py(項目入口文件)
–key=keys:使用 keys 進行加密打包
pyinstaller --key=123456 -F xxx.py
-d:產生 debug 版本的可執行文件
-p:用來添加程序所用到的包的所在位置,設置導入路徑,可以用 ; ( Linux 使用 :)分割來指定多個目錄。
-w:表示不用控制臺窗口,使用 Windows 子系統執行,當程序啟動的時候不會打開命令行(只對 Windows 有效)
-c:表示打開控制臺窗口,使用控制臺子系統執行,當程序啟動的時候會打開命令行(默認)(只對 Windows 有效)
-i:將 file.ico 添加為可執行文件的資源,改變程序的圖標(只對 Windows 系統有效)
安裝完成后,新建一個文件夾,將源文件放到該文件夾下面,打開cmd, cd 進入該文件夾下(重點),執行下面語句
生成的文件結構如下
exe 可執行文件在 dist 目錄下
到這里就可以把 .exe 文件發送別人了,并且可以在沒有任何配置的情況下運行哦~(前提是同樣是 Windows 下)
這里的圖標是我自己在網上找的。
如果沒有 ico 格式的圖標的話,
推薦一個免費的 icon 網站:https://iconstore.co/
然后在 https://www.aconvert.com/cn/icon/svg-to-ico/ 轉換成指定大小的 ico 圖標。
晚上去找女朋友領獎勵~
這就是本文所有的內容了,如果感覺還不錯的話。
? 點個贊再走吧?。。?
后續會繼續分享各種有趣的文章,如果感興趣的話可以點個關注不迷路哦~。
源碼可以通過可以通微信搜 Python新視野,回復“文件整理工具”直接獲取。對于剛入門 Python 或是想要入門 Python 的小伙伴,也可以通過上述方式一起交流學習,都是從新手走過來的,有時候一個簡單的問題卡很久,但可能別人的一點撥就會恍然大悟,由衷的希望大家能夠共同進步。
Linux Python Windows
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。