Python批量操作Excel文件詳解
批量操作
OS模塊介紹
OS的全稱是Operation System,指操作系統(tǒng)。在Python里面OS模塊中主要提供了與操作系統(tǒng)即電腦系統(tǒng)之間進(jìn)行交互的一些功能。我們很多的自動(dòng)化操作都會(huì)依賴于該模塊的功能。
OS模塊基本操作
獲取當(dāng)前工作路徑
我們?cè)谧铋_始Python基礎(chǔ)知識(shí)那一章節(jié)給講了如何安裝Anaconda以及如何利用Jupyter notebook寫代碼??墒悄銈冎滥銈儗懺贘upyter notebook里面的代碼存儲(chǔ)在電腦的哪里嗎?
是不是很多同學(xué)不知道?想要知道也很簡(jiǎn)單,只需要在Jupyter notebook中輸入如下代碼,然后運(yùn)行:
import os os.getcwd()
運(yùn)行上面代碼會(huì)得到如下結(jié)果:
'C:\\Users\\zhangjunhong\\python庫(kù)\\Python報(bào)表自動(dòng)化'
上面這個(gè)文件路徑就是此時(shí)notebook代碼文件所在的路徑,你的代碼存儲(chǔ)在哪個(gè)文件路徑下,運(yùn)行就會(huì)得到對(duì)應(yīng)結(jié)果。
獲取一個(gè)文件夾下的所有文件名
我們經(jīng)常會(huì)將電腦本地的文件導(dǎo)入到Python中來處理,在導(dǎo)入之前需要知道文件的存儲(chǔ)路徑以及文件名。如果只有一兩個(gè)文件的話還好,我們直接把文件名和文件路徑手動(dòng)輸入即可,但是有的時(shí)候需要導(dǎo)入的文件會(huì)有很多。這個(gè)時(shí)候手動(dòng)輸入效率就會(huì)比較低,就需要借助代碼來提高效率。
如下文件夾中有四個(gè)Excel文件:

我們可以使用os.listdir(path)來獲取path路徑下所有的文件名。具體實(shí)現(xiàn)代碼如下:
import os
os.listdir('D:/Data-Science/share/data/test')
運(yùn)行上面代碼會(huì)得到如下結(jié)果:
['3月績(jī)效-張明明.xlsx', '李旦3月績(jī)效.xlsx', '王玥月-3月績(jī)效.xlsx', '陳凱3月份績(jī)效.xlsx']
對(duì)文件名進(jìn)行重命名
對(duì)文件進(jìn)行重命名也是比較高頻的一種需求,我們可以利用os.rename('old_name','new_name')來對(duì)文件進(jìn)行重命名。old_name就是舊文件名,new_name就是新文件名。
我們先在test文件夾下面新建一個(gè)名為test_old的文件,然后再利用如下代碼,就可以把test_old文件名改成test_new:
os.rename('D:/Data-Science/share/data/test/test_old.xlsx'
,'D:/Data-Science/share/data/test/test_new.xlsx')
運(yùn)行上面代碼以后,再到test文件夾下面,就可以看到test_old文件已經(jīng)不存在了,只有test_new。
創(chuàng)建一個(gè)文件夾
當(dāng)我們想要在指定路徑下創(chuàng)建一個(gè)新的文件夾時(shí),可以選擇手動(dòng)新建文件夾,也可以利用os.mkdir(path)進(jìn)行新建,只需要指明具體的路徑(path)即可。
如下所示,當(dāng)我們運(yùn)行下面代碼,就表示在D:/Data-Science/share/data路徑下新建一個(gè)名為test11的文件夾:
os.mkdir('D:/Data-Science/share/data/test11')

刪除一個(gè)文件夾
刪除文件夾與創(chuàng)建文件夾是相對(duì)應(yīng)的,當(dāng)然了,我們也可以選擇手動(dòng)刪除一個(gè)文件夾,也可以利用os.removedirs(path)進(jìn)行刪除,指明要?jiǎng)h除的路徑(path)。
如下所示,當(dāng)我們運(yùn)行如下代碼,就表示把剛剛創(chuàng)建的test11文件夾刪除了:
os.removedirs('D:/Data-Science/share/data/test11')
刪除一個(gè)文件
刪除文件時(shí)刪除一個(gè)具體的文件,而刪除文件夾是將一整個(gè)文件夾,包含文件夾中的所有文件進(jìn)行刪除。刪除文件利用的是os.remove(path),指明文件所在的路徑(path)。
如下所示,當(dāng)我們運(yùn)行如下代碼,就表示將test文件夾中test_new文件進(jìn)行刪除:
os.remove('D:/Data-Science/share/data/test/test_new.xlsx')
利用OS模塊進(jìn)行批量操作
批量讀取一個(gè)文件下的多個(gè)文件
有的時(shí)候一個(gè)文件夾下面會(huì)包含多個(gè)相類似的文件,比如一個(gè)部門不同人的績(jī)效文件,我們需要把這些文件批量讀取到Python里面中,然后進(jìn)行處理。
我們?cè)谇懊鎸W(xué)過,如何讀取一個(gè)文件,可以用load_work,也可以用read_excel,不管用哪種方式,都只需要指明要讀取文件的路徑即可。
那如何批量讀取呢?先獲取該文件下的所有文件名,然后再遍歷讀取每一個(gè)文件。具體實(shí)現(xiàn)代碼如下所示:
import pandas as pd
#獲取文件夾下的所有文件名
name_list = os.listdir('D:/Data-Science/share/data/test')
#for循環(huán)遍歷讀取
for i in name_list:
df = pd.read_excel(r'D:/Data-Science/share/data/test/' + i)
print('{}讀取完成!'.format(i))
如果要對(duì)讀取進(jìn)來的文件進(jìn)行數(shù)據(jù)操作的時(shí)候,把具體的操作實(shí)現(xiàn)代碼放置在讀取代碼之后即可。比如我們要對(duì)每一個(gè)讀取進(jìn)來的文件進(jìn)行刪除重復(fù)值處理,實(shí)現(xiàn)代碼如下:
import pandas as pd
#獲取文件夾下的所有文件名
name_list = os.listdir('D:/Data-Science/share/data/test')
#for循環(huán)遍歷讀取
for i in name_list:
df = pd.read_excel(r'D:/Data-Science/share/data/test/' + i)
df = df.drop_duplicates() #刪除重復(fù)值處理
print('{}讀取完成!'.format(i))
批量創(chuàng)建文件夾
有的時(shí)候我們需要根據(jù)特定的主題來創(chuàng)建特定的文件夾,比如需要根據(jù)月份創(chuàng)建12個(gè)文件夾。我們前面學(xué)過如何創(chuàng)建單個(gè)文件夾,要批量創(chuàng)建多個(gè)文件夾,只需要遍歷執(zhí)行單個(gè)文件夾的語(yǔ)句即可。具體實(shí)現(xiàn)代碼如下:
month_num = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
for i in month_num:
os.mkdir('D:/Data-Science/share/data/' + i)
print('{}創(chuàng)建完成!'.format(i))
運(yùn)行上面代碼以后就會(huì)在該文件路徑下新建了12個(gè)文件夾:

批量重命名文件
有的時(shí)候我們有好多相同主題的文件,但是這些文件的文件名比較混亂,比如下面這些文件,是各個(gè)員工的3月績(jī)效情況,但是命名格式都不太一樣,我們要將其統(tǒng)一成名字+3月績(jī)效這樣的格式。要達(dá)到這種效果,可以通過前面學(xué)到的對(duì)文件進(jìn)行重命名操作來實(shí)現(xiàn),前面只講了對(duì)單一文件的操作,那如何同時(shí)對(duì)多個(gè)文件進(jìn)行批量操作呢?

具體實(shí)現(xiàn)代碼如下:
import os
#獲取指定文件下所有文件名
old_name = os.listdir('D:/Data-Science/share/data/test')
name = ["張明明","李旦","王玥月","陳凱"]
#遍歷每一個(gè)姓名
for n in name:
#遍歷每一個(gè)舊文件名
for o in old_name:
#判斷舊文件名中是否包含特定的姓名
#如果包含就進(jìn)行重命名
if n in o:
os.rename('D:/Data-Science/share/data/test/' + o, 'D:/Data-Science/share/data/test/' + n +"3月績(jī)效.xlsx")
運(yùn)行上面代碼以后可以看到文件下的原文件名全部已被重命名完成。

其他批量操作
批量合并多個(gè)文件
如下所示,該文件夾下面有1-6月的分月銷售日?qǐng)?bào),已知這些日?qǐng)?bào)的結(jié)構(gòu)是相同的,只有日期和銷量?jī)闪?,現(xiàn)在我們想要把這些不同月份的日?qǐng)?bào)合并成一份。

將分月銷售日?qǐng)?bào)合并成一份文件的具體實(shí)現(xiàn)代碼如下:
import os
import pandas as pd
#獲取指定文件下所有文件名
name_list = os.listdir('D:/Data-Science/share/data/sale_data')
#創(chuàng)建一個(gè)相同結(jié)構(gòu)的空DataFrame
df_o = pd.DataFrame({'日期':[],'銷量':[]})
#遍歷讀取每一個(gè)文件
for i in name_list:
df = pd.read_excel(r'D:/Data-Science/share/data/sale_data/' + i)
#進(jìn)行縱向拼接
df_v = pd.concat([df_o,df])
#把拼接后的結(jié)果賦值給df_o
df_o = df_v
df_o
運(yùn)行上面代碼就會(huì)得到合并后的文件df_o,如下所示:

將一份文件按照指定列拆分成多個(gè)文件
上面講了如何批量合并多個(gè)文件,我們也有合并多個(gè)文件逆需求,即按照指定列將一個(gè)文件拆分成多個(gè)文件。
還是上面的數(shù)據(jù)集,假設(shè)我們現(xiàn)在拿到了一份1-6月份的文件,這份文件除了日期和銷量?jī)闪幸酝猓€多了一列月份,現(xiàn)在我們需要做的就是根據(jù)月份這一列將這一份文件拆分成多個(gè)文件,每個(gè)月份單獨(dú)存儲(chǔ)為一個(gè)文件。
具體實(shí)現(xiàn)代碼如下:
#生成一列新的月份列
df_o['月份'] = df_o['日期'].apply(lambda x:x.month)
#遍歷每一個(gè)月份值
for m in df_o['月份'].unique():
#將特定月份值的數(shù)據(jù)篩選出來
df_month = df_o[df_o['月份'] == m]
#將篩選出來的數(shù)據(jù)進(jìn)行保存
df_month.to_csv(r'D:/Data-Science/share/data/split_data/' + str(m) + '月銷售日?qǐng)?bào)_拆分后.csv')
運(yùn)行上面代碼我們就可以在目標(biāo)路徑下看到拆分后的多個(gè)文件:

到此這篇關(guān)于Python批量操作Excel文件詳解 的文章就介紹到這了,更多相關(guān)Python 操作Excel文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用pytorch提取卷積神經(jīng)網(wǎng)絡(luò)的特征圖可視化
這篇文章主要給大家介紹了關(guān)于使用pytorch提取卷積神經(jīng)網(wǎng)絡(luò)的特征圖可視化的相關(guān)資料,文中給出了詳細(xì)的思路以及示例代碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
基于OpenCV(python)的實(shí)現(xiàn)文本分割之垂直投影法
本文主要介紹了基于OpenCV(python)的實(shí)現(xiàn)文本分割之垂直投影法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
python機(jī)器學(xué)習(xí)庫(kù)常用匯總
這篇文章主要為大家匯總了常用python機(jī)器學(xué)習(xí)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
python密碼學(xué)列置換密碼學(xué)習(xí)
這篇文章主要為大家介紹了python密碼學(xué)列置換密碼學(xué)習(xí)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python實(shí)現(xiàn)ModBusTCP協(xié)議的client功能
Modbus TCP 是一種基于 TCP/IP 協(xié)議棧的 Modbus 通信協(xié)議,它用于在工業(yè)自動(dòng)化系統(tǒng)中進(jìn)行設(shè)備之間的通信,只要通過pymodbus或pyModbusTCP任意模塊就可以實(shí)現(xiàn),本文采用pymodbus,感興趣的朋友跟隨小編一起看看吧2023-10-10

