使用Python進行一鍵整理文件,自動分類DOCX與PDF
你是否經(jīng)常面對這樣的場景:下載的文檔、工作報告、學習資料混在一個文件夾里,DOCX和PDF文件雜亂無章,想找一個文件需要翻半天?手動新建文件夾、逐個移動文件不僅浪費時間,還容易遺漏或誤操作。

今天,我們將實現(xiàn)一個零依賴的Python自動化腳本——只需指定目標文件夾,它就能自動識別DOCX和PDF文件,分別移動到專屬子文件夾中,還能實時反饋移動進度、統(tǒng)計文件數(shù)量,并處理異常情況(如文件被占用)。即使是Python新手,也能3分鐘上手!
一、環(huán)境準備:零依賴,開箱即用
這個腳本的核心優(yōu)勢之一是無需安裝任何第三方庫,完全基于Python標準庫開發(fā),兼容性極強。只要你的電腦安裝了Python(3.4及以上版本),就能直接運行。
1. 核心依賴庫(均為Python標準庫)
腳本中用到的3個庫均隨Python默認安裝,無需額外執(zhí)行pip install:
os:輔助路徑處理(本腳本中主要用于配合Path對象,確保路徑兼容性)。shutil:提供文件移動、復制等核心操作,是實現(xiàn)“整理文件”的關鍵。pathlib.Path:Python 3.4+引入的路徑操作庫,比傳統(tǒng)的os.path更簡潔、更直觀,還能自動處理Windows/macOS/Linux的路徑差異(如\和/)。
2. Python版本要求
推薦使用Python 3.6及以上版本(Path.glob方法在3.4+已支持,但高版本在異常處理和編碼兼容性上更優(yōu))。
3. 跨平臺支持
腳本可在Windows、macOS、Linux系統(tǒng)上直接運行,僅需修改“源目錄路徑”(如Windows的D:\data、macOS的/Users/xxx/Documents),無需調整代碼邏輯。
二、完整源代碼以及解析
先看完整可運行代碼,再分模塊拆解核心邏輯,幫你吃透每一步的設計思路:
import os
import shutil
from pathlib import Path
def organize_files(source_dir):
# 轉換為Path對象
source_path = Path(source_dir)
# 創(chuàng)建目標文件夾
docx_folder = source_path / "docx"
pdf_folder = source_path / "pdf"
# 確保目標文件夾存在
docx_folder.mkdir(exist_ok=True)
pdf_folder.mkdir(exist_ok=True)
# 計數(shù)器
docx_count = 0
pdf_count = 0
# 獲取源目錄中的所有文件
for file_path in source_path.glob("*"):
# 跳過文件夾
if file_path.is_dir():
continue
# 處理.docx文件
if file_path.suffix.lower() == ".docx":
target_path = docx_folder / file_path.name
try:
shutil.move(str(file_path), str(target_path))
docx_count += 1
print(f"已移動: {file_path.name} -> docx文件夾")
except Exception as e:
print(f"移動 {file_path.name} 失敗: {str(e)}")
# 處理.pdf文件
elif file_path.suffix.lower() == ".pdf":
target_path = pdf_folder / file_path.name
try:
shutil.move(str(file_path), str(target_path))
pdf_count += 1
print(f"已移動: {file_path.name} -> pdf文件夾")
except Exception as e:
print(f"移動 {file_path.name} 失敗: {str(e)}")
print(f"\n整理完成!")
print(f"已移動 {docx_count} 個DOCX文件到 {docx_folder}")
print(f"已移動 {pdf_count} 個PDF文件到 {pdf_folder}")
if __name__ == "__main__":
# 源目錄
source_directory = r"D:\data"
organize_files(source_directory)
1. 核心函數(shù):organize_files(source_dir)
這個函數(shù)是腳本的“心臟”,負責從“路徑處理”到“文件移動”的全流程,我們分10個關鍵步驟拆解:
步驟1:路徑對象化(source_path = Path(source_dir))
- 為什么不用字符串路徑?
Path對象能自動處理不同系統(tǒng)的路徑分隔符(Windows用\,macOS用/),比如在macOS中寫source_directory = "/Users/xxx/data",腳本也能正常運行,無需修改代碼。 - 后續(xù)所有路徑操作(如創(chuàng)建子文件夾、拼接文件名)都基于
Path對象,代碼更簡潔。
步驟2-3:創(chuàng)建目標子文件夾
docx_folder = source_path / "docx" pdf_folder.mkdir(exist_ok=True)
source_path / "docx":等價于在源目錄下拼接“docx”子文件夾路徑(類似字符串拼接,但更安全)。mkdir(exist_ok=True):核心參數(shù)——如果“docx”文件夾已存在,不會報錯;如果不存在,則自動創(chuàng)建。避免了手動判斷“文件夾是否存在”的冗余代碼。
步驟4:初始化計數(shù)器
docx_count和pdf_count用于統(tǒng)計移動成功的文件數(shù)量,最終在控制臺打印,讓用戶直觀知道整理效果(比如“移動了5個DOCX、3個PDF”)。
步驟5:遍歷源目錄文件(source_path.glob("*"))
glob("*"):遍歷源目錄下的所有內(nèi)容(包括文件和子文件夾),返回一個迭代器。- 后續(xù)用
file_path.is_dir()跳過子文件夾,確保只處理“文件”,避免誤移動用戶已有的其他目錄(比如源目錄下已有“圖片”文件夾,不會被腳本處理)。
步驟6-7:按文件類型移動(核心邏輯)
這是腳本的核心功能,以DOCX文件為例:
- 后綴判斷:
file_path.suffix.lower() == ".docx"——suffix獲取文件后綴(如.docx),lower()將后綴轉為小寫,確保.DOCX(大寫)、.Docx(混合大小寫)也能被識別,兼容性更強。 - 目標路徑拼接:
target_path = docx_folder / file_path.name——file_path.name獲取文件名(如“報告.docx”),確保移動后文件名不變,用戶容易找到。 - 文件移動:
shutil.move(str(file_path), str(target_path))——shutil.move是Python標準庫中用于“移動文件/目錄”的函數(shù),這里將Path對象轉為字符串(部分舊版本shutil對Path支持不足,兼容處理)。 - 異常捕獲:
try-except塊是腳本“健壯性”的關鍵——如果文件被其他程序占用(如Word打開了“報告.docx”),腳本不會崩潰,而是打印錯誤原因(如“ PermissionError: [WinError 32] 另一個程序正在使用此文件”),并繼續(xù)處理下一個文件。
步驟8:打印統(tǒng)計結果
整理完成后,清晰顯示“移動了多少個文件”“移動到哪個路徑”,避免用戶“不知道有沒有整理成功”的困惑。
2. 主程序入口(if __name__ == "__main__":)
定義“源目錄”(source_directory):這是用戶唯一需要修改的地方,需填寫你要整理的文件夾路徑。
- Windows示例:
source_directory = r"D:\data"(r表示“原始字符串”,避免\被當作轉義符,比如D:\data不會變成D:data)。 - macOS/Linux示例:
source_directory = "/Users/yourname/Documents"(直接用/分隔路徑)。
調用organize_files(source_directory):執(zhí)行文件整理邏輯。
三、實戰(zhàn)使用:3步完成文件整理
掌握代碼邏輯后,我們以Windows系統(tǒng)為例,實際運行腳本,感受“一鍵整理”的便捷:
步驟1:修改“源目錄”路徑
打開腳本,找到source_directory = r"D:\data",將路徑改為你要整理的文件夾,比如:
source_directory = r"C:\Users\你的用戶名\Desktop\雜亂文件"
提示:如果不知道文件夾路徑,可以打開文件夾,在地址欄復制路徑,直接粘貼到腳本中(Windows路徑記得加r前綴)。
步驟2:運行腳本
打開“命令提示符”(Win+R,輸入cmd回車)。
運行腳本(假設腳本名為file_organizer.py):
python file_organizer.py
步驟3:查看整理結果
運行后會看到類似以下的輸出:
已移動: 項目方案.docx -> docx文件夾
已移動: 會議記錄.DOCX -> docx文件夾(注意:大寫后綴也能識別)
已移動: 產(chǎn)品手冊.pdf -> pdf文件夾
移動 財務報表.pdf 失敗: [WinError 32] 另一個程序正在使用此文件,進程無法訪問。
已移動: 需求文檔.docx -> docx文件夾
整理完成!
已移動 3 個DOCX文件到 C:\Users\你的用戶名\Desktop\雜亂文件\docx
已移動 1 個PDF文件到 C:\Users\你的用戶名\Desktop\雜亂文件\pdf
- 打開源目錄,會發(fā)現(xiàn)自動生成了
docx和pdf兩個子文件夾,所有未被占用的DOCX/PDF文件已分別移動到對應文件夾中。 - 失敗的文件(如“財務報表.pdf”)會保留在源目錄,關閉占用它的程序(如Adobe Reader)后,重新運行腳本即可移動。
四、常見問題與解決方案
在使用過程中,可能會遇到一些小問題,這里整理了高頻場景及解決方法,幫你快速排查:
| 問題現(xiàn)象 | 可能原因 | 解決方案 |
|---|---|---|
| 腳本提示“移動失?。毫硪粋€程序正在使用此文件” | 目標文件被Word、Adobe Reader等程序打開 | 關閉對應的程序(如關閉Word窗口、PDF閱讀器),重新運行腳本 |
| 腳本提示“PermissionError:權限不足” | 源目錄或目標文件夾無寫入權限(如系統(tǒng)目錄、管理員創(chuàng)建的文件夾) | 1. 右鍵點擊“命令提示符”,選擇“以管理員身份運行”; 2. 或把文件移動到非系統(tǒng)目錄(如桌面、Documents) |
| 腳本沒移動任何文件,但源目錄有DOCX/PDF | 1. 源目錄路徑寫錯(如D:\data寫成D:data); 2. 文件后綴是.doc(非.docx)或.PDF(腳本已處理小寫,此情況較少) | 1. 核對source_directory路徑,確保與文件夾地址欄一致; 2. 若為.doc文件,可手動轉為.docx,或擴展腳本支持.doc |
| 腳本報錯“FileNotFoundError:[WinError 3] 系統(tǒng)找不到指定的路徑” | 源目錄不存在(如D:\data文件夾未創(chuàng)建) | 先在對應路徑創(chuàng)建文件夾(如手動新建D:\data),再運行腳本 |
五、進階擴展:讓腳本更強大
基礎腳本已能滿足“分類DOCX/PDF”的需求,但我們還可以根據(jù)實際場景擴展功能,讓它適配更多使用場景:
1. 支持更多文件類型(如TXT、JPG)
如果想同時整理TXT文檔和JPG圖片,只需添加對應的目標文件夾和判斷邏輯:
# 新增目標文件夾
txt_folder = source_path / "txt"
jpg_folder = source_path / "jpg"
# 確保文件夾存在
txt_folder.mkdir(exist_ok=True)
jpg_folder.mkdir(exist_ok=True)
# 新增計數(shù)器
txt_count = 0
jpg_count = 0
# 新增TXT文件處理邏輯
elif file_path.suffix.lower() == ".txt":
target_path = txt_folder / file_path.name
try:
shutil.move(str(file_path), str(target_path))
txt_count += 1
print(f"已移動: {file_path.name} -> txt文件夾")
except Exception as e:
print(f"移動 {file_path.name} 失敗: {str(e)}")
# 新增JPG文件處理邏輯(同理可添加.png、.gif等)
elif file_path.suffix.lower() in [".jpg", ".jpeg"]:
target_path = jpg_folder / file_path.name
try:
shutil.move(str(file_path), str(target_path))
jpg_count += 1
print(f"已移動: {file_path.name} -> jpg文件夾")
except Exception as e:
print(f"移動 {file_path.name} 失敗: {str(e)}")
# 最后更新統(tǒng)計結果
print(f"已移動 {txt_count} 個TXT文件到 {txt_folder}")
print(f"已移動 {jpg_count} 個JPG文件到 {jpg_folder}")
2. 處理子文件夾中的文件(遞歸整理)
默認腳本只處理“源目錄一級目錄”的文件,若想整理源目錄下所有子文件夾中的DOCX/PDF,只需修改glob參數(shù)為**/*(遞歸匹配所有文件):
# 原代碼:只處理一級目錄
# for file_path in source_path.glob("*"):
# 修改后:遞歸處理所有子文件夾中的文件
for file_path in source_path.glob("**/*"):
注意:遞歸整理時,仍會跳過子文件夾(if file_path.is_dir(): continue),只移動文件。
3. 避免同名文件覆蓋
如果目標文件夾中已有同名文件(如docx文件夾已存在“報告.docx”),shutil.move會直接覆蓋舊文件。若想避免覆蓋,可在移動前判斷目標路徑是否存在,若存在則重命名(如“報告_1.docx”):
# 以DOCX文件為例,修改目標路徑邏輯
if file_path.suffix.lower() == ".docx":
target_path = docx_folder / file_path.name
# 若目標路徑已存在,添加序號(如“報告_1.docx”)
count = 1
while target_path.exists():
# 分離文件名和后綴:如“報告.docx” -> “報告”和“.docx”
name = file_path.stem
suffix = file_path.suffix
# 重命名目標路徑:報告_1.docx、報告_2.docx...
target_path = docx_folder / f"{name}_{count}{suffix}"
count += 1
# 后續(xù)移動邏輯不變...
自動化的本質是“把重復工作交給代碼”——這個腳本雖然簡單,但能幫你節(jié)省大量手動整理文件的時間,尤其適合經(jīng)常處理文檔的職場人、學生。如果你的工作中需要整理其他類型的文件(如表格、圖片),也可以基于本文的擴展思路,修改腳本適配更多場景。
到此這篇關于使用Python進行一鍵整理文件,自動分類DOCX與PDF的文章就介紹到這了,更多相關Python整理文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python 實現(xiàn)刪除某路徑下文件及文件夾的實例講解
下面小編就為大家分享一篇Python 實現(xiàn)刪除某路徑下文件及文件夾的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
利用Python快速搭建Markdown筆記發(fā)布系統(tǒng)
這篇文章主要為大家詳細介紹了使用Python生態(tài)的成熟工具,在30分鐘內(nèi)搭建一個支持Markdown渲染、分類標簽、全文搜索的私有化知識發(fā)布系統(tǒng),感興趣的小伙伴可以參考下2025-04-04
淺析python中5個帶key的內(nèi)置函數(shù)
這篇文章主要介紹了python中5個帶key的內(nèi)置函數(shù),包括max取最大值函數(shù),min取最小值函數(shù),filter過濾函數(shù),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Python中plt.imshow(image)無法顯示圖片的解決
這篇文章主要介紹了Python中plt.imshow(image)無法顯示圖片的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Python用類實現(xiàn)撲克牌發(fā)牌的示例代碼
這篇文章主要介紹了Python用類實現(xiàn)撲克牌發(fā)牌的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06

