Python實(shí)現(xiàn)自動(dòng)批量修改文件名稱
本文介紹基于Python語(yǔ)言,按照一定命名規(guī)則批量修改多個(gè)文件的文件名的方法。
已知現(xiàn)有一個(gè)文件夾,其中包括班級(jí)所有同學(xué)上交的作業(yè)文件,每人一份;所有作業(yè)文件命名格式統(tǒng)一,都是地信1701_姓名_學(xué)習(xí)心得格式。
現(xiàn)需要對(duì)每一位同學(xué)的作業(yè)文件加以改名,有很多種需求。
第一種需求,將每一位同學(xué)作業(yè)文件名中原本是姓名的部分,都修改為學(xué)號(hào)。即原本的地信1701_姓名_學(xué)習(xí)心得修改為地信1701_學(xué)號(hào)_學(xué)習(xí)心得(每一位同學(xué)有且僅有一個(gè)學(xué)號(hào),且相互不重復(fù),且姓名與學(xué)號(hào)的對(duì)應(yīng)關(guān)系我們是已知的),如下圖所示。
第二種需求,將每一位同學(xué)作業(yè)文件名中原本姓名的部分的后面,都添加上學(xué)號(hào)。即原本的地信1701_姓名_學(xué)習(xí)心得修改為地信1701_姓名_學(xué)號(hào)_學(xué)習(xí)心得,如下圖所示。
第三種需求,將每一位同學(xué)滿足第二種需求后的作業(yè)文件名中的下劃線_部分,都修改為連接符-。即原本的地信1701_姓名_學(xué)號(hào)_學(xué)習(xí)心得修改為地信1701-姓名-學(xué)號(hào)-學(xué)習(xí)心得,如下圖所示。
好了,知道了需求我們就可以開始進(jìn)行代碼的編寫了。
首先,導(dǎo)入必要的庫(kù)。
import os from openpyxl import load_workbook
接下來,我們首先需要讓程序知道每一位同學(xué)的姓名與學(xué)號(hào)之間的對(duì)應(yīng)關(guān)系。因?yàn)槲覀円阎彰c學(xué)號(hào)之間的關(guān)系,因此首先需要類似于下圖的表格,其中為姓名與學(xué)號(hào)的一一對(duì)應(yīng)關(guān)系。
接下來,我們需要將上述表格中的內(nèi)容在Python中以字典的格式存儲(chǔ)。具體代碼如下,關(guān)于這一部分代碼的解釋大家查看Python導(dǎo)入Excel表格數(shù)據(jù)并以字典dict格式保存即可,此處就不再贅述。
original_path='F:/學(xué)習(xí)/2020-2021-2/形勢(shì)與政策(二)/論文與學(xué)習(xí)心得/01_學(xué)習(xí)心得/地信1701-學(xué)習(xí)心得/' look_up_table_path='F:/學(xué)習(xí)/2020-2021-2/形勢(shì)與政策(二)/論文與學(xué)習(xí)心得/01_學(xué)習(xí)心得/Name_Number.xlsx' look_up_table_row_start=2 look_up_table_row_number=32 name_number_dict={} look_up_table_excel=load_workbook(look_up_table_path) look_up_table_all_sheet=look_up_table_excel.get_sheet_names() look_up_table_sheet=look_up_table_excel.get_sheet_by_name(look_up_table_all_sheet[0]) for i in range(look_up_table_row_start,look_up_table_row_start+look_up_table_row_number): number=look_up_table_sheet.cell(i,1).value name=look_up_table_sheet.cell(i,2).value name_number_dict[number]=name
接下來,進(jìn)行第一種需求的代碼實(shí)現(xiàn)。
# Replacement Renaming all_word=os.listdir(original_path) for i in range(len(all_word)): old_name=all_word[i] old_name_name_end=old_name.rfind('_') old_name_name=old_name[7:old_name_name_end] new_name_number=[k for k, v in name_number_dict.items() if v==old_name_name] new_name=old_name.replace(old_name_name,''.join(str(w) for w in new_name_number)) os.rename(original_path+old_name,original_path+new_name)
其中,由于大家的姓名有兩個(gè)字、三個(gè)字或者更多字,因此我們使用了old_name_name_end
獲取原有文件名稱中姓名最后一個(gè)字所在的下標(biāo);而姓名開始的位置是確定的,即從而確定了每一位同學(xué)姓名在原有文件名中的起始與終止下標(biāo)位置。同時(shí)利用replace
,依據(jù)同學(xué)的姓名,在字典中搜索該同學(xué)的學(xué)號(hào),最后將同學(xué)的名字替換為其對(duì)應(yīng)的學(xué)號(hào)。
其次,是第二種需求。
# Additional Renaming all_word=os.listdir(original_path) for i in range(len(all_word)): old_name=all_word[i] old_name_name_end=old_name.rfind('_') old_name_name=old_name[7:old_name_name_end] new_name_number=[k for k, v in name_number_dict.items() if v==old_name_name] old_name_list=list(old_name) insert_number=''.join(str(w) for w in new_name_number)+'_' old_name_list.insert(old_name_name_end+1,insert_number) new_name=''.join(old_name_list) os.rename(original_path+old_name,original_path+new_name)
在這里,同樣使用old_name_name_end
獲取原有文件名稱中姓名最后一個(gè)字所在的下標(biāo),從而確定了每一位同學(xué)姓名在原有文件名中的起始與終止下標(biāo)位置。此外,利用insert
,將學(xué)號(hào)這一項(xiàng)插入到原有的文件名稱中。
最后,是第三種需求。
# Modified Renaming all_word=os.listdir(original_path) for i in range(len(all_word)): old_name=all_word[i] new_name=old_name.replace('_',"-",3) os.rename(original_path+old_name,original_path+new_name)
這個(gè)就簡(jiǎn)單很多了,直接利用replace
,用連接符-
替換掉原有的下劃線_
即可。
至此,大功告成。
到此這篇關(guān)于Python實(shí)現(xiàn)自動(dòng)批量修改文件名稱的文章就介紹到這了,更多相關(guān)Python批量修改文件名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中的random.choices函數(shù)用法詳解
這篇文章主要給大家介紹了關(guān)于Python中random.choices函數(shù)用法的相關(guān)資料,random.random()?的功能是隨機(jī)返回一個(gè)?0-1范圍內(nèi)的浮點(diǎn)數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08Python字符串轉(zhuǎn)換成浮點(diǎn)數(shù)函數(shù)分享
本文給大家分享的是一則使用Python實(shí)現(xiàn)字符串轉(zhuǎn)換成浮點(diǎn)數(shù)的代碼,主要是使用map和reduce方法來實(shí)現(xiàn),有需要的小伙伴可以參考下。2015-07-07python中實(shí)現(xiàn)精確的浮點(diǎn)數(shù)運(yùn)算詳解
計(jì)算機(jī)智能處理可數(shù)集合的運(yùn)算,但是全體實(shí)數(shù)是不可數(shù)的,所以計(jì)算機(jī)只能用一些奇怪的方法來擬合他,于是就產(chǎn)生了浮點(diǎn)數(shù)。下面這篇文章主要給大家介紹了關(guān)于python中實(shí)現(xiàn)精確浮點(diǎn)數(shù)運(yùn)算的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11django頁(yè)面跳轉(zhuǎn)問題及注意事項(xiàng)
這篇文章主要介紹了django頁(yè)面跳轉(zhuǎn)問題及注意事項(xiàng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07Python關(guān)于sys.argv[]的用法及說明
sys.argv[]是Python中用于從程序外部獲取參數(shù)的列表,參數(shù)索引從0開始,0索引代表腳本名稱本身,后續(xù)索引代表傳遞給腳本的參數(shù),通過指定索引可以獲取特定的參數(shù),如sys.argv[1]獲取第一個(gè)傳入?yún)?shù),當(dāng)傳入多個(gè)參數(shù)時(shí),可以通過切片或循環(huán)獲取全部參數(shù)2024-09-09Django項(xiàng)目的初步創(chuàng)建與簡(jiǎn)單配置
本文主要介紹了Django項(xiàng)目的初步創(chuàng)建與簡(jiǎn)單配置,詳細(xì)介紹了如何安裝和配置Django,包括創(chuàng)建項(xiàng)目、數(shù)據(jù)庫(kù)配置、路由等,通過本文可以了解如何使用Django創(chuàng)建自己的Web應(yīng)用程序2023-09-09