女朋友桌面文件雜亂無章?氣得我用Python給她做了一個文件整理工具

2022-01-06 志斌的python筆記

效果圖

寫在前面

事情是這樣子的,昨天回去無意看了一下女朋友桌面,密密麻麻的全是文件,各式各樣的佔滿屏幕,簡直要把我這個強迫症給難受死,讓她整理一下,還懶的整理。於是中午沒休息寫了一個文件整理工具給這個懶豬,希望她能夠識抬舉,給我點獎勵~哈哈廢話不多說,進入正題!

主要涉及到的庫:

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自動化整理文件「大升級」,任意路徑下文件,都給你整理的明明白白!
    https://www.cnblogs.com/huny/p/14146719.html大家好,我是為大家分享「乾貨」和「黑科技」的黃同學!1. 前言工作上的文檔和資料好幾個月沒整理了,因為平常太忙都是隨手往桌面丟。整個桌面雜亂無章全是文檔和資料。幾乎快佔滿整個屏幕了,所有我必須要整理一下了。但是手動整理太費時間了,於是我想到了python。
  • Python一鍵自動化整理文件,任意路徑下文件,都給你整理的明明白白!
    前言工作上的文檔和資料好幾個月沒整理了,因為平常太忙都是隨手往桌面丟。整個桌面雜亂無章全是文檔和資料。幾乎快佔滿整個屏幕了,所有我必須要整理一下了。但是手動整理太費時間了,於是我想到了python。2.
  • Python自動化整理文件 "可視化界面" 小工具上線了,拿來即用,趕緊體驗!
    其實,我希望大家不僅僅是看公眾號文章,有時候需要自己動手,還有福利贈送,自己不僅學到了知識,也得到了獎勵,一舉兩得。2. 小工具效果展示根據實際需求,需要被整理的文件夾往往都是單層的,例如桌面,所以程序並不支持去對子文件夾去遞歸處理。已經在子文件夾中的文件,都會被認為是已經被整理過了。下面,我們來講述一下它的功能介紹。
  • 工具集 超實用的文件整理術
    因此,建立一個有序的文件管理體系是非常有必要的如果你只有個位數的文件,那桌面就是一個很好的存放地點;如果你有兩位數的文件,建立單層級的文件夾就是不錯的選擇;如果你有大量項目文件需要管理,那你就需要規劃一個清晰的文件管理結構。
  • Python文件如何在windows桌面上雙擊執行
    我們上次已經介紹過在命令行如何執行python文件,還有如何在python安裝目錄外的目錄下執行python文件。但那些都是在cmd命令行下面執行的,能不能真正的在windows桌面上執行下呢?我們今天就來討論這個問題今天來學習下如何直接雙擊執行後綴名是py的Python文件。好了,我們仍然以一個列印輸出的文件來進行講解。
  • 用 Python 高效智能管理文件夾
    是否電腦裡的文件越來越多,想刪掉一些卻又捨不得?身處大數據和人工智慧的時代,如何節約時間,提高工作效率,快速積累知識並使用知識呢?本文分享一種知識整理術,並提供一個實用的小工具。不知道大家有沒有用過思維導圖,我曾經很熱衷於這樣的結構工具,但它一個是要收費;而且畫出如下的結構圖(僅是舉例,內容不重要)只能完全手動,花費時間長;最後它不開源,不能個性化新增功能。
  • 「文件去哪兒了?」德旺W文化用品化身桌面整理收納官
    德旺W文化用品化身桌面整理收納官 2020-11-30 14:51:27 來源:榕城網 編輯: 移動網際網路的高速發展,讓人們的工作方式發生了翻天覆地的變化,無紙化辦公成為了各行各業的常態,電子文檔、雲文檔幫助我們完美地記錄和整理文件,讓我們的工作效率不斷提升。
  • Python文件和文件夾操作整理
    比如我們要將row = ('acme', 50, 91.5)連接起來輸出,因為str.join()函數要求所有的參數必須是str類型,所以如果使用str.join(),那麼需要多做一些工作。filename, 'rb') as f:    data = f.read(16)    text = data.decode('utf-8')with open(filename, 'wb') as f:    text = 'Hello World'    f.write(text.encode('utf-8'))如果要求對一個不存在的文件進行寫操作
  • 14-用Python 讀寫 Excel 文件
    最大支持行數為1048576行),人們開始轉向python和R這樣的分析工具了XlsxWriterxlrd&xlwt[2]OpenPyXL[3]Microsoft Excel API[4]介紹可以創建 Excel 2007 或更高版本的 XLSX 文件即 python-excel,含 xlrd、xlwt 和 xlutils 三大模塊,分別提供讀、寫和其他功能可以讀寫 Excel
  • 這可能是最全的電腦文件整理方法合集
    在眾多反饋中,不乏一些有價值,值得參考的文件整理方法。在這裡,要感謝所有參與調查的朋友,感謝你們分享出自己的方法。雖然沒有逐條進行回復,但我仔細地看了每一個參與調查朋友的反饋,並且做了詳細的整理。基於知識共享的原則,我在這裡,把一些有代表性的方法分享出來。其實,縱觀大家給我的反饋,基本上可以把電腦文件整理方法分為兩派,一個是工具派,另一個是分類派。
  • 電腦上自帶的3種文件整理「神器」 80%的人都不會用!
    但太多的文件放在桌面上,又不夠簡潔。其實,Windows10 中不僅僅提供了「桌面」這一種承載常用文件的形式。你可以通過更多的形式,來輕鬆管理你的「常用文件」幫你提升很大效率,今天跟各位分享一些我的小心得。
  • Python筆記:批量合併Excel文件信息
    但是,如果文件的數目太多(比如幾十個、上百個、幾百上千個)的時候,再一個一個地去加載,會是一件很折騰人的事情。我們又知道,for循環可用來進行批處理,來幫我們自動實現大量重複的操作步驟。例如:我在桌面上的「python」文件夾內放置4個表結構相同(表頭相同)的文件,接下來我準備用for循環優雅地實現上面我所吹過的牛。文件截圖如下:註:為了不洩露工作信息,所以我對表格內容進行了模糊化處理。
  • 【種草評】| DropIt:一款便捷小巧的文件整理工具
    噓(yan)寒(xing)問(kao)暖(wen)後讓我們回到今天的正題——種草今天要給大家安利的是一款文件整理軟體——DropIt。只需簡單的選擇-拖拽這樣的操作,就可以幫助我們將凌亂的桌面/文件夾整理的乾乾淨淨。
  • 如何快速有效地整理電腦文件,我有3個秘密方法要分享給你!
    前段時間,神助攻的讀者群有位朋友問:在日常工作生活中,我對資料整理是變了態的嚴格,習慣將所有文件弄得整整齊齊,並有一套自己的歸類邏輯。所以我很少出現資料找半天甚至找不到的情況,基本在 1 分鐘之內就能找到需要的文件。給大家看看俺的強迫症指數。這是我個人電腦的開始屏幕 👇。小助理看完,居然說要付費請我幫她整理!我當然是:醜拒!
  • 關於文件整理看這篇文章就夠了
    這桌面於是我就突發奇想地,想寫一篇關於文件整理的文章。我從不認為文件整理只是簡單的整理電腦文件,它應該是一個特別龐大的體系,它的家族成員應該包含網盤文件整理、瀏覽器書籤整理、筆記系統整理、微信好友整理、人脈管理、圖片管理... ...
  • 實例15:用Python批量轉換doc文件為docx文件
    python提供了win32com模塊(應安裝pypiwin32模塊,win32com包含在其中,即使用命令"pip install pypiwin32"),其中的SaveAs方法可以代替人手批量將文件另存為我們需要的格式。首先,我們使用os模塊,獲取需要做「另存為」操作的文件所在路徑。
  • Python學習第52課-寫入文件
    【每天幾分鐘,從零入門python編程的世界!】Python操作外部文件的數據,既然有讀取,就會有寫入。我們現在學習用Python寫入文件。順便提一點小小的計算機知識,我們人類讀取一個文件,一般是眼睛裡能夠看到打開的文件窗口區域的所有內容,或者一整塊內容,我們可以一個字一個字的讀,也可以一句一句的讀,甚至一目十行。而計算機讀取文件,是一個「字」一個「字」讀取的,這裡的「字」是指一串二進位的數碼,其實任何文件的內容都是能夠轉換成二進位數碼的符號。
  • 用幾行 Python 代碼偷偷複製老師 U 盤文件
    一直沒有去實現,最近不想看論文,就想起來這個事情了,發現其實用幾行python代碼就能搞定了。分兩步,首先寫出來python代碼,其次把.py文件轉換成exe文件,直接在windows電腦上後臺運行。在命令行用pip安裝 pyinstaller包pip install pyinstaller2.下載安裝pyinstaler運行時所需要的windows擴展pywin32mhammond/pywin32選擇最新版的下載,注意要選擇對應的python版本(version)和python
  • python-docx無法處理 「doc格式」 文件,於是我這樣做......
    對於Excel文件,如果出現xls、xlsx、xlsm混合文件應該怎麼處理?對於Word文件,出現doc和docx的混合文件,又該怎麼處理。你可能會用VBA,但是不得不說,批量操作這些文件,還是要學Python,操作真的很簡單。為了增強文章的可讀性,我們分2篇文章講述這些問題。