利用Python實現(xiàn)文檔批量重命名
日常工作中總會遇到一些需要收集文件的情況,即便在收集前千叮嚀萬囑咐,告知大家文件命名規(guī)則為 “編號-項目名稱”,可最后收集回來的文件,名稱依舊五花八門。有的使用橫杠作為分隔符,有的卻用下劃線;編號錯誤的情況時有發(fā)生,甚至連項目名稱也寫錯,這無疑給后續(xù)的文件整理和數(shù)據(jù)分析工作帶來了極大的困擾。
比如,我們有一份正確的編號和項目名稱對應關系的Excel表格,內容如下:
編號 | 項目名稱 |
---|---|
250211 | 蘋果 |
250212 | 香蕉 |
250216 | 桃子 |
按照規(guī)范,收集到的文件命名應該是 “250211-蘋果.docx”、“250212-香蕉.docx”、“250216-桃子.docx” 。但現(xiàn)實總是很殘酷,實際收集到的文件卻是 “250211_蘋果.docx”(分隔符錯誤)、“2502122-香蕉.docx”(編號錯誤)、“250216-橘子.docx”(項目名稱錯誤)。面對如此混亂的文件命名,人工逐一修改不僅耗時費力,還容易出錯,這時我們急需工具進行批量重命名。Python作為強大的編程語言,能夠高效解決這類問題,接下來就讓我們看看如何通過Python實現(xiàn)批量重命名操作。
1. 需求分析
面對這些混亂的文件命名,我們需要解決以下關鍵問題:
統(tǒng)一分隔符: 將所有文件中不同的分隔符,如橫杠、下劃線等,全部替換為指定的橫杠分隔符。
檢查編號錯誤: 以Excel表格中的編號為基準,檢查文件名中的編號是否有錯誤,如出現(xiàn)編號重復或編號不在Excel中則提醒人工檢查。
糾正項目名稱: 根據(jù)Excel表格中的映射關系,把錯誤的項目名稱替換為正確的名稱。
2. 安裝依賴庫
為達成上述功能,我們會運用Python的os庫處理文件操作,re庫進行正則表達式匹配與字符串替換,pandas庫讀取Excel文件中的映射關系。
在開始編寫代碼前,要確保已經(jīng)安裝了pandas庫。若未安裝,可通過以下命令進行安裝:
pip install pandas
3. 代碼實現(xiàn)
以下代碼首先讀取Excel文件中的編號與項目名稱對應關系,然后遍歷當前目錄下的所有文件。對于每個文件,先統(tǒng)一分隔符,再檢查編號是否正確,最后根據(jù)Excel中的映射關系糾正項目名稱,并完成文件的重命名操作。在執(zhí)行過程中,對于出現(xiàn)錯誤的文件,會給出相應的提示信息,方便人工進行檢查和處理。
3.1 rename.py
import os import pandas as pd import re def rename_files(excel_path, old_files_path, new_files_path): # 獲取當前腳本所在目錄 parent = os.path.dirname(os.path.realpath(__file__)) # 構建 Excel 文件的完整路徑 excel_path = os.path.join(parent, excel_path) # 構建待重命名文件所在目錄的完整路徑 old_files_path = os.path.join(parent, old_files_path) # 構建重命名后文件存放目錄的完整路徑 new_files_path = os.path.join(parent, new_files_path) # 檢查 Excel 文件是否存在 try: df = pd.read_excel(excel_path) except FileNotFoundError: print(f"未找到 Excel 文件: {excel_path}") return # 檢查待重命名文件目錄是否存在 if not os.path.exists(old_files_path): print(f"待重命名文件目錄 {old_files_path} 不存在。") return # 檢查重命名后文件存放目錄是否存在,若不存在則創(chuàng)建 if not os.path.exists(new_files_path): os.makedirs(new_files_path) # 將編號列轉換為字符串格式 df["編號"] = df["編號"].astype(str) # 將編號和項目名稱轉換為字典 id_name_dict = dict(zip(df["編號"], df["項目名稱"])) # 獲取待重命名目錄下所有文件 file_list = os.listdir(old_files_path) for file in file_list: file_path = os.path.join(old_files_path, file) if os.path.isfile(file_path): # 分離文件名和擴展名 file_name, file_extension = os.path.splitext(file) # 檢查并替換分隔符 new_file_name = re.sub(r"[_/\\]", "-", file_name) parts = new_file_name.split("-") if len(parts) != 2: print(f"文件 {file} 命名格式錯誤,無法解析。") continue file_id, project_name = parts[0], parts[1] # 檢查編號是否正確 if file_id not in id_name_dict.keys(): print(f"文件 {file} 中的編號 {file_id} 錯誤,請人工檢查。") continue # 糾正項目名稱 correct_project_name = id_name_dict[file_id] if project_name != correct_project_name: new_file_name = f"{file_id}-{correct_project_name}" new_file = new_file_name + file_extension new_file_path = os.path.join(new_files_path, new_file) # 重命名并移動文件 try: os.rename(file_path, new_file_path) except FileExistsError: print(f"文件 {new_file} 已存在于 {new_files_path},無法重命名 {file}。") # 示例調用 if __name__ == "__main__": rename_files("example.xlsx", "old_files", "new_files")
3.2 代碼說明
1. 函數(shù)定義與路徑處理:
- rename_files 函數(shù)接收三個參數(shù):excel_path(Excel文件路徑)、old_files_path(待重命名文件目錄路徑)、new_files_path(重命名后文件存放目錄路徑)。
- 通過 os.path.dirname(os.path.realpath(__file__)) 獲取當前腳本所在目錄,再用 os.path.join 拼接路徑,確保跨平臺兼容性。
2. 文件與目錄檢查:
- 嘗試讀取Excel文件,若文件不存在,捕獲異常并提示,終止函數(shù)。
- 檢查待重命名文件目錄是否存在,不存在則提示并終止。
- 檢查重命名后文件存放目錄,不存在則創(chuàng)建。
3. 數(shù)據(jù)處理與字典構建:
- 將 df["編號"] 列轉為字符串類型,方便與文件名編號比較。
- 利用 dict(zip(df["編號"], df["項目名稱"])) 構建編號與項目名稱的字典映射。
4. 文件遍歷與重命名:
- 獲取待重命名目錄下所有文件。
- 對每個文件,檢查是否為文件,分離文件名與擴展名。
- 用正則表達式替換分隔符,按橫杠拆分文件名。
- 檢查編號是否在字典中,不在則提示編號錯誤并跳過。
- 對比項目名稱,不一致則糾正,構建新文件名。
- 嘗試重命名并移動文件,若目標文件已存在,捕獲異常并提示。
4. 運行示例
假設文件結構如下:
project/
├── rename.py
├── example.xlsx
├── old_files/
│ ├── 250211_蘋果.docx
│ ├── 2502122-香蕉.docx
│ ├── 250216-橘子.docx
└── new_files/ (初始為空)
其中 example.xlsx
內容如下:
編號 | 項目名稱 |
---|---|
250211 | 蘋果 |
250212 | 香蕉 |
250216 | 桃子 |
在命令行進入 project 目錄,執(zhí)行 python rename.py 后,new_files 目錄下會生成:
new_files/
├── 250211-蘋果.docx
├── 250216-桃子.docx
同時,控制臺輸出:
文件 2502122_香蕉.docx 中的編號 2502122 錯誤,請人工檢查。
250211_蘋果.docx 因分隔符錯誤,重命名為 250211-蘋果.docx 并移動到 new_files 目錄;2502122-香蕉.docx 因編號錯誤未重命名移動;250216-橘子.docx 因項目名稱錯誤,重命名為 250216 - 桃子.docx 并移動到 new_files 目錄。
5. 注意事項
備份文件: 在執(zhí)行批量重命名之前,務必對重要文件進行備份,防止因代碼錯誤導致文件丟失或損壞。
測試代碼: 在處理大量文件之前,先在少量樣本文件上測試代碼,確保重命名規(guī)則符合預期。
路徑兼容性: 不同操作系統(tǒng)路徑分隔符不同(Windows 下是 \,Linux 和 macOS 下是 /),建議使用 os.path.join 拼接路徑,增強跨平臺兼容性。
xlsx 文件格式: 確保xlsx文件包含 “編號” 和 “項目名稱” 兩列,數(shù)據(jù)準確無誤,編號作為唯一標識不能重復。
文件權限: 運行代碼的用戶需對 old_files_path 和 new_files_path 目錄有讀寫權限,否則可能導致運行錯誤。
編碼問題: 若Excel文件或文件名含非ASCII字符,注意編碼問題,確保讀取和處理文件時編碼正確,避免亂碼。
6. 總結
通過 Python 實現(xiàn)的批量重命名功能,能夠高效地解決工作中文件命名不一致的問題。無論遇到多么復雜的命名混亂情況,只要合理運用Python的庫和函數(shù),都能輕松應對。
到此這篇關于利用Python實現(xiàn)文檔批量重命名的文章就介紹到這了,更多相關Python重命名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Anaconda+pycharm安裝及環(huán)境配置全過程
在使用pyCharm進行開發(fā)時,需要用到Anaconda創(chuàng)建的環(huán)境,下面這篇文章主要給大家介紹了關于Anaconda+pycharm安裝及環(huán)境配置的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-09-09python CMD命令行傳參實現(xiàn)方法(argparse、click、fire)
這篇文章主要介紹了python CMD命令行傳參實現(xiàn)方法(argparse、click、fire),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-07-07Python的Django框架中settings文件的部署建議
這篇文章主要介紹了Python的Django框架中settings文件的部署建議,包括對local_settings的弊病的一些簡單分析,需要的朋友可以參考下2015-05-05使用python+pygame實現(xiàn)中秋節(jié)動畫效果
馬上就要中秋節(jié)了,使用python可以實現(xiàn)中秋節(jié)動畫效果,包括月亮、兔子和煙花嗎?當然是可以的,那該如何實現(xiàn)呢?這篇文章我們主要使用pygame來實現(xiàn),文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2023-09-09Django數(shù)據(jù)庫操作之save與update的使用
這篇文章主要介紹了Django數(shù)據(jù)庫操作之save與update的使用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04