亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Python實(shí)現(xiàn)文檔批量重命名

 更新時(shí)間:2025年02月27日 09:51:54   作者:fufufunny  
日常工作中總會遇到一些需要收集文件的情況,但往往最后收集回來的文件名稱會五花八門,下面小編就來為大家講講如何使用Python實(shí)現(xiàn)批量重命名操作吧

日常工作中總會遇到一些需要收集文件的情況,即便在收集前千叮嚀萬囑咐,告知大家文件命名規(guī)則為 “編號-項(xiàng)目名稱”,可最后收集回來的文件,名稱依舊五花八門。有的使用橫杠作為分隔符,有的卻用下劃線;編號錯(cuò)誤的情況時(shí)有發(fā)生,甚至連項(xiàng)目名稱也寫錯(cuò),這無疑給后續(xù)的文件整理和數(shù)據(jù)分析工作帶來了極大的困擾。

比如,我們有一份正確的編號和項(xiàng)目名稱對應(yīng)關(guān)系的Excel表格,內(nèi)容如下:

編號項(xiàng)目名稱
250211蘋果
250212香蕉
250216桃子

按照規(guī)范,收集到的文件命名應(yīng)該是 “250211-蘋果.docx”、“250212-香蕉.docx”、“250216-桃子.docx” 。但現(xiàn)實(shí)總是很殘酷,實(shí)際收集到的文件卻是 “250211_蘋果.docx”(分隔符錯(cuò)誤)、“2502122-香蕉.docx”(編號錯(cuò)誤)、“250216-橘子.docx”(項(xiàng)目名稱錯(cuò)誤)。面對如此混亂的文件命名,人工逐一修改不僅耗時(shí)費(fèi)力,還容易出錯(cuò),這時(shí)我們急需工具進(jìn)行批量重命名。Python作為強(qiáng)大的編程語言,能夠高效解決這類問題,接下來就讓我們看看如何通過Python實(shí)現(xiàn)批量重命名操作。

1. 需求分析

面對這些混亂的文件命名,我們需要解決以下關(guān)鍵問題:

統(tǒng)一分隔符: 將所有文件中不同的分隔符,如橫杠、下劃線等,全部替換為指定的橫杠分隔符。

檢查編號錯(cuò)誤: 以Excel表格中的編號為基準(zhǔn),檢查文件名中的編號是否有錯(cuò)誤,如出現(xiàn)編號重復(fù)或編號不在Excel中則提醒人工檢查。

糾正項(xiàng)目名稱: 根據(jù)Excel表格中的映射關(guān)系,把錯(cuò)誤的項(xiàng)目名稱替換為正確的名稱。

2. 安裝依賴庫

為達(dá)成上述功能,我們會運(yùn)用Python的os庫處理文件操作,re庫進(jìn)行正則表達(dá)式匹配與字符串替換,pandas庫讀取Excel文件中的映射關(guān)系。

在開始編寫代碼前,要確保已經(jīng)安裝了pandas庫。若未安裝,可通過以下命令進(jìn)行安裝:

pip install pandas

3. 代碼實(shí)現(xiàn)

以下代碼首先讀取Excel文件中的編號與項(xiàng)目名稱對應(yīng)關(guān)系,然后遍歷當(dāng)前目錄下的所有文件。對于每個(gè)文件,先統(tǒng)一分隔符,再檢查編號是否正確,最后根據(jù)Excel中的映射關(guān)系糾正項(xiàng)目名稱,并完成文件的重命名操作。在執(zhí)行過程中,對于出現(xiàn)錯(cuò)誤的文件,會給出相應(yīng)的提示信息,方便人工進(jìn)行檢查和處理。

3.1 rename.py

import os
import pandas as pd
import re


def rename_files(excel_path, old_files_path, new_files_path):
    # 獲取當(dāng)前腳本所在目錄
    parent = os.path.dirname(os.path.realpath(__file__))
    # 構(gòu)建 Excel 文件的完整路徑
    excel_path = os.path.join(parent, excel_path)
    # 構(gòu)建待重命名文件所在目錄的完整路徑
    old_files_path = os.path.join(parent, old_files_path)
    # 構(gòu)建重命名后文件存放目錄的完整路徑
    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)
    # 將編號列轉(zhuǎn)換為字符串格式
    df["編號"] = df["編號"].astype(str)
    # 將編號和項(xiàng)目名稱轉(zhuǎn)換為字典
    id_name_dict = dict(zip(df["編號"], df["項(xiàng)目名稱"]))
    # 獲取待重命名目錄下所有文件
    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):
            # 分離文件名和擴(kuò)展名
            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} 命名格式錯(cuò)誤,無法解析。")
                continue
            file_id, project_name = parts[0], parts[1]
            # 檢查編號是否正確
            if file_id not in id_name_dict.keys():
                print(f"文件 {file} 中的編號 {file_id} 錯(cuò)誤,請人工檢查。")
                continue
            # 糾正項(xiàng)目名稱
            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}。")


# 示例調(diào)用
if __name__ == "__main__":
    rename_files("example.xlsx", "old_files", "new_files")

3.2 代碼說明

1. 函數(shù)定義與路徑處理:

  • rename_files 函數(shù)接收三個(gè)參數(shù):excel_path(Excel文件路徑)、old_files_path(待重命名文件目錄路徑)、new_files_path(重命名后文件存放目錄路徑)。
  • 通過 os.path.dirname(os.path.realpath(__file__)) 獲取當(dāng)前腳本所在目錄,再用 os.path.join 拼接路徑,確??缙脚_兼容性。

2. 文件與目錄檢查:

  • 嘗試讀取Excel文件,若文件不存在,捕獲異常并提示,終止函數(shù)。
  • 檢查待重命名文件目錄是否存在,不存在則提示并終止。
  • 檢查重命名后文件存放目錄,不存在則創(chuàng)建。

3. 數(shù)據(jù)處理與字典構(gòu)建:

  • 將 df["編號"] 列轉(zhuǎn)為字符串類型,方便與文件名編號比較。
  • 利用 dict(zip(df["編號"], df["項(xiàng)目名稱"])) 構(gòu)建編號與項(xiàng)目名稱的字典映射。

4. 文件遍歷與重命名:

  • 獲取待重命名目錄下所有文件。
  • 對每個(gè)文件,檢查是否為文件,分離文件名與擴(kuò)展名。
  • 用正則表達(dá)式替換分隔符,按橫杠拆分文件名。
  • 檢查編號是否在字典中,不在則提示編號錯(cuò)誤并跳過。
  • 對比項(xiàng)目名稱,不一致則糾正,構(gòu)建新文件名。
  • 嘗試重命名并移動文件,若目標(biāo)文件已存在,捕獲異常并提示。

4. 運(yùn)行示例

假設(shè)文件結(jié)構(gòu)如下:

project/
├── rename.py
├── example.xlsx
├── old_files/
│   ├── 250211_蘋果.docx
│   ├── 2502122-香蕉.docx
│   ├── 250216-橘子.docx
└── new_files/ (初始為空)

其中 example.xlsx 內(nèi)容如下:

編號項(xiàng)目名稱
250211蘋果
250212香蕉
250216桃子

在命令行進(jìn)入 project 目錄,執(zhí)行 python rename.py 后,new_files 目錄下會生成:

new_files/
├── 250211-蘋果.docx
├── 250216-桃子.docx

同時(shí),控制臺輸出:

文件 2502122_香蕉.docx 中的編號 2502122 錯(cuò)誤,請人工檢查。

250211_蘋果.docx 因分隔符錯(cuò)誤,重命名為 250211-蘋果.docx 并移動到 new_files 目錄;2502122-香蕉.docx 因編號錯(cuò)誤未重命名移動;250216-橘子.docx 因項(xiàng)目名稱錯(cuò)誤,重命名為 250216 - 桃子.docx 并移動到 new_files 目錄。

5. 注意事項(xiàng)

備份文件: 在執(zhí)行批量重命名之前,務(wù)必對重要文件進(jìn)行備份,防止因代碼錯(cuò)誤導(dǎo)致文件丟失或損壞。

測試代碼: 在處理大量文件之前,先在少量樣本文件上測試代碼,確保重命名規(guī)則符合預(yù)期。

路徑兼容性: 不同操作系統(tǒng)路徑分隔符不同(Windows 下是 \,Linux 和 macOS 下是 /),建議使用 os.path.join 拼接路徑,增強(qiáng)跨平臺兼容性。

xlsx 文件格式: 確保xlsx文件包含 “編號” 和 “項(xiàng)目名稱” 兩列,數(shù)據(jù)準(zhǔn)確無誤,編號作為唯一標(biāo)識不能重復(fù)。

文件權(quán)限: 運(yùn)行代碼的用戶需對 old_files_path 和 new_files_path 目錄有讀寫權(quán)限,否則可能導(dǎo)致運(yùn)行錯(cuò)誤。

編碼問題: 若Excel文件或文件名含非ASCII字符,注意編碼問題,確保讀取和處理文件時(shí)編碼正確,避免亂碼。

6. 總結(jié)

通過 Python 實(shí)現(xiàn)的批量重命名功能,能夠高效地解決工作中文件命名不一致的問題。無論遇到多么復(fù)雜的命名混亂情況,只要合理運(yùn)用Python的庫和函數(shù),都能輕松應(yīng)對。

到此這篇關(guān)于利用Python實(shí)現(xiàn)文檔批量重命名的文章就介紹到這了,更多相關(guān)Python重命名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python命令行傳遞實(shí)例化對象的方法

    利用Python命令行傳遞實(shí)例化對象的方法

    最近在工作中遇到了一個(gè)問題,需要接收啟動腳本傳遞過來的實(shí)例化后的對象,通過在網(wǎng)上查找資料發(fā)現(xiàn)了兩個(gè)方法,文中通過實(shí)例代碼就給大家詳細(xì)介紹了這兩種方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • Django數(shù)據(jù)庫操作之save與update的使用

    Django數(shù)據(jù)庫操作之save與update的使用

    這篇文章主要介紹了Django數(shù)據(jù)庫操作之save與update的使用,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 最新評論