欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python根據(jù)Excel表進(jìn)行文件重命名的實(shí)現(xiàn)示例

 更新時(shí)間:2024年01月31日 08:29:09   作者:PythonFun  
在日常辦公過程中,批量重命名是經(jīng)常使用的操作,本文主要介紹了Python根據(jù)Excel表進(jìn)行文件重命名,具有一定的參考價(jià)值,感興趣的可以了解一下

一、問題背景

在日常辦公過程中,批量重命名是經(jīng)常使用的操作。之前我們已經(jīng)進(jìn)行了初步探索,主要是通過批處理文件、renamer軟件或者Python中的pathlib等模塊對當(dāng)前目錄下的文件進(jìn)行批量重命名。

而今天我們要使用的是Python+Excel的方法對指定目錄下的文件進(jìn)行個(gè)性化的重命名。采用這種方法有以下兩種優(yōu)勢:

1. 個(gè)性化重命名

原文件名和目標(biāo)文件名沒有規(guī)律,無法通過正則表達(dá)式進(jìn)行重命名,可以用Excel對文件名進(jìn)行手動編輯,對指定文件進(jìn)行個(gè)性化的重命名。

2. 支持逆向重命名

以往批量重命名前,需要對原文件名進(jìn)行備份,否則重命名后還需要手動改回來,十分麻煩。而這種方法只需要交換A列和B列的數(shù)據(jù),就可以進(jìn)行逆向重命名,不必?fù)?dān)心改完后不能恢復(fù)原文件名。

二、批量重命名實(shí)現(xiàn)過程

1.問題的提出

當(dāng)前目錄下有AAA.txt,BBB.txt, CCC.txt等多個(gè)文件,我們需要把它們批量重命名為111.txt, 222.txt, 333.txt這樣的形式,一般的批量重命名的方法很難實(shí)現(xiàn)。

問題的提出

2. 問題分析

我們把需要重命名的文件選中,在【主頁】標(biāo)簽下點(diǎn)擊【復(fù)制路徑】獲取這些文件名的路徑。

獲取文件路徑

然后我們就可以得到下面這種樣式:

"G:\桌面\用Python給文件進(jìn)行批量重命名\AAA.txt"
"G:\桌面\用Python給文件進(jìn)行批量重命名\BBB.txt"
"G:\桌面\用Python給文件進(jìn)行批量重命名\CCC.txt"

把上面的內(nèi)容復(fù)制到Excel中,按"\"和引號進(jìn)行【分列】操作,最后得到【111.txt, 222.txt, 333.txt】這樣的文件名,然后放到A列中,如下圖所示:

批量重命名Excel文件

Excel表中,A列為舊的文件名, B列為新的文件名,我們可以手動對新文件名進(jìn)行修改,然后通過Python讀取txg每一行,把A列文件名重命名為B列對應(yīng)的文件名。

3. 問題的解決

下一步,我們就可以采用Python編寫對應(yīng)代碼:讀取Excel文件中的A列和B列內(nèi)容,然后遍歷當(dāng)前目錄下的指定文件,采用os.rename()對文件進(jìn)行重命名。

第一種方法:使用xlwings——過程有點(diǎn)兒復(fù)雜

原理就是讀取file_name.xlsx文件中的內(nèi)容,然后遍歷每一行后,用os.rename()進(jìn)行重命名。

import os
import xlwings as xw
name_path = r'file_name.xlsx'
# 打開工作簿
app = xw.App(visible=False, add_book=False)
app.display_alerts = False  # 關(guān)閉一些提示信息,可以加快運(yùn)行速度。 默認(rèn)為 True
app.screen_updating = False  # 更新顯示工作表的內(nèi)容。默認(rèn)為 True。關(guān)閉它也可以提升運(yùn)行速度
wb = app.books.open(name_path)
# 獲取數(shù)據(jù)源表格
sht = wb.sheets['name']
col_data_old = sht.range('A2:A200').value  # 舊文件名,A列
col_data_new = sht.range('B2:B200').value  # 新文件名,B列
# 重命名
for i in range(len(col_data_new)):
    if col_data_old[i] is not None and col_data_new[i] is not None:
        # 如果單元格值不是 None,則處理這些值
        file_name = os.path.abspath(col_data_old[i])
        file_rename = os.path.abspath(col_data_new[i])
        os.rename(file_rename, file_name)
# 保存表格并退出
wb.save()
wb.close()
app.quit()

第二種方法:采用openpyxl——簡化代碼

相比xlwings,openpyxl的代碼更為簡單,邏輯也很清晰。導(dǎo)入模塊,打開工作簿,獲取表格的內(nèi)容,循環(huán)每一行,讀取非空數(shù)據(jù),然后用os.rename()進(jìn)行重命名。

import os
import openpyxl
name_path = r'file_name.xlsx'
# 打開工作簿
wb = openpyxl.load_workbook(name_path)
# 獲取數(shù)據(jù)源表格
sht = wb.worksheets[0]
# 獲取 A 列和 B 列的最大行數(shù)
max_row = max(sht.max_row, sht.max_column)
# 遍歷 A 列和 B 列,將非空數(shù)據(jù)添加到字典中
for row in range(2, max_row + 1):
    key = sht.cell(row=row, column=1).value
    value = sht.cell(row=row, column=2).value
    if key is not None and value is not None:
        file_name = os.path.abspath(key)
        file_rename = os.path.abspath(value)
        os.rename(file_name, file_rename)

第三種方法:Pandas法——進(jìn)一步簡化

pandas這個(gè)模塊導(dǎo)入雖然有點(diǎn)兒慢,但是它的重命名代碼量最少,搭配上pathlib,命名效率更高。實(shí)現(xiàn)過程是導(dǎo)入pandas和path模塊,讀取Excel文件,把A列和B列轉(zhuǎn)化為一一對應(yīng)的字典,然后遍歷Excel表的每一行進(jìn)行批量重命名。

from pathlib import Path
import pandas as pd

# 文件路徑
name_path = Path('file_name.xlsx')

# 讀取 Excel 文件
df = pd.read_excel(name_path)

# 將 A 列和 B 列數(shù)據(jù)轉(zhuǎn)換為字典
data_dict = df.set_index(df.columns[0]).squeeze().to_dict()

# 遍歷字典,執(zhí)行文件重命名
for key, value in data_dict.items():
    if pd.notna(key) and pd.notna(value):
        file_name = Path(key).absolute() # 獲取原文件的絕對路徑
        file_rename = Path(value).absolute()
        file_name.rename(file_rename)

以上代碼中,首先將 Excel 文件讀取到 df 這個(gè)數(shù)據(jù)框變量中,然后使用 set_index() 方法將第一列設(shè)置為索引,并使用 squeeze() 方法將結(jié)果轉(zhuǎn)換為 Series。然后,使用 to_dict() 方法將 Series 轉(zhuǎn)換為字典。最后,遍歷字典,執(zhí)行文件重命名操作。

三、學(xué)后反思

  • Python在批量重命名的過程中體現(xiàn)出良好的跨平臺性,可以把Excel表和文件連接起來,使數(shù)據(jù)的流轉(zhuǎn)更加便捷。另一方面,Python在批量操作文件方面的優(yōu)勢明顯,程序調(diào)試成功后,哪怕是上千個(gè)文件也可以輕松重命名,可以極大地提升重命名準(zhǔn)確性和效率。
  • 雖然我們可以通過交換A列和B列的數(shù)據(jù)進(jìn)行逆向重命名,但是保險(xiǎn)起見,還是在重命名之前對文件進(jìn)行備份,然后再操作,以免出現(xiàn)操作失誤的問題。
  • Python程序默認(rèn)是從Excel表第二行開始讀取,所以一定要保留列索引,不要?jiǎng)h除,否則可能會出現(xiàn)報(bào)錯(cuò)。
  • 本次小項(xiàng)目涉及xlwings, openpyxl和pandas等Excel讀取模塊,以及os和pathlib等多個(gè)文件管理模塊,對于讀取它們之間的差異具有很好的幫助作用??梢悦黠@看出,openpyxl和pandas比xlwings使用起來更簡單,所以推薦初學(xué)者直接學(xué)openpyxl,高級的學(xué)習(xí)者可以學(xué)習(xí)pandas,為后期學(xué)習(xí)數(shù)據(jù)分析打下基礎(chǔ)。

 到此這篇關(guān)于Python根據(jù)Excel表進(jìn)行文件重命名的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python Excel文件重命名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python常用的魔法方法(雙下劃線)

    python常用的魔法方法(雙下劃線)

    本文介紹一下python中常用的魔法方法以及面向?qū)ο笾蟹浅V匾膯卫J?。具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • Python實(shí)現(xiàn)B站UP主小助手詳解開發(fā)流程

    Python實(shí)現(xiàn)B站UP主小助手詳解開發(fā)流程

    功能是不是還挺豐富的,從寫第一行代碼到完成也就花了兩天不到的時(shí)間,這也證明了使用python開發(fā)的高效率,下面來說說這些功能開發(fā)中我遇到了哪些問題,我又是如何解決的
    2022-02-02
  • python實(shí)現(xiàn)簡單名片管理系統(tǒng)

    python實(shí)現(xiàn)簡單名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python實(shí)現(xiàn)web應(yīng)用框架之增加響應(yīng)對象

    python實(shí)現(xiàn)web應(yīng)用框架之增加響應(yīng)對象

    這篇文章主要介紹了python利用web應(yīng)用框架如何增加響應(yīng)對象的,文中有相應(yīng)的代碼示例,對大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的同學(xué)可以參考下
    2023-05-05
  • 你知道嗎實(shí)現(xiàn)炫酷可視化只要1行python代碼

    你知道嗎實(shí)現(xiàn)炫酷可視化只要1行python代碼

    這篇文章主要給大家介紹了關(guān)于利用Python進(jìn)行數(shù)據(jù)可視化常見的9種方法!文中介紹的方法真的超實(shí)用!對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • python+mysql實(shí)現(xiàn)學(xué)生信息查詢系統(tǒng)

    python+mysql實(shí)現(xiàn)學(xué)生信息查詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python+mysql實(shí)現(xiàn)學(xué)生信息查詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Python split()函數(shù)使用方法詳解

    Python split()函數(shù)使用方法詳解

    這篇文章主要給大家詳細(xì)介紹一下Python split()函數(shù)的使用方法,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Python利用PIL進(jìn)行圖片壓縮

    Python利用PIL進(jìn)行圖片壓縮

    有時(shí)在發(fā)送一些文件如PPT、Word時(shí),由于文件中的圖片太大,導(dǎo)致文件也太大,無法發(fā)送,所以本文為大家介紹了Python中圖片壓縮的方法,需要的可以參考下
    2025-02-02
  • Python中的迭代器和生成器詳解

    Python中的迭代器和生成器詳解

    這篇文章主要介紹了Python中的迭代器和生成器詳解,生成器表達(dá)式是用來生成函數(shù)調(diào)用時(shí)序列參數(shù)的一種迭代器寫法,生成器對象可以遍歷或轉(zhuǎn)化為列表或元組等數(shù)據(jù)結(jié)構(gòu),但不能切片,需要的朋友可以參考下
    2023-07-07
  • python中random隨機(jī)函數(shù)詳解

    python中random隨機(jī)函數(shù)詳解

    大家好,本篇文章主要講的是python中random隨機(jī)函數(shù)詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02

最新評論