一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

UC頭條:[干貨](méi)建議收藏! ! 全網(wǎng)最完整的Python操作Excel數(shù)據(jù)封裝函數(shù)

 江南荷葉 2021-06-02

1.寫在前面

2.前期準(zhǔn)備

2.1.初識(shí)Excel

2.2.格式區(qū)別

2.3.庫(kù)的使用

2.4.整體思路

3.代碼展示

3.1.xls格式

3.1.1.讀取xls格式文件

3.1.2.寫入xls格式文件

3.1.3.追加寫入xls格式文件

3.2.xlsx格式

3.2.1.讀取xlsx格式文件

3.2.2.寫入xlsx格式文件

3.2.3.追加寫入xlsx格式文件

4.結(jié)果測(cè)試

4.1.讀取測(cè)試

4.2.寫入測(cè)試

4.3.追加寫入測(cè)試

5.總結(jié)

點(diǎn)擊加載圖片

1.寫在前面

對(duì)比其它編程語(yǔ)言,我們都知道Python最大的優(yōu)勢(shì)是代碼簡(jiǎn)單,有豐富的第三方開(kāi)源庫(kù)供開(kāi)發(fā)者使用。伴隨著近幾年數(shù)據(jù)分析的熱度,Python也成為最受歡迎的編程語(yǔ)言之一。而對(duì)于數(shù)據(jù)的讀取和存儲(chǔ),對(duì)于普通人來(lái)講,除了數(shù)據(jù)庫(kù)之外,最常見(jiàn)的就是微軟的Excel。

2.前期準(zhǔn)備

2.1.初識(shí)Excel

MicrosoftExcel是Microsoft為使用Windows和AppleMacintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。

2.2.格式區(qū)別

Excel中有xls和xlsx兩種格式,它們之間的區(qū)別是:

文件格式不同。xls是一個(gè)特有的二進(jìn)制格式,其核心結(jié)構(gòu)是復(fù)合文檔類型的結(jié)構(gòu),而xlsx的核心結(jié)構(gòu)是XML類型的結(jié)構(gòu),采用的是基于XML的壓縮方式,使其占用的空間更小。xlsx中最后一個(gè)x的意義就在于此。

版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。

兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。

2.3.庫(kù)的使用

Python自帶的模塊中有針對(duì)xls格式的xlrd和xlwt模塊,但這兩個(gè)庫(kù)僅僅是針對(duì)xls的操作,當(dāng)我們要操作xlsx格式文件時(shí),則需要使用到openpyxl第三方庫(kù)。

模塊來(lái)源支持格式
xlrd標(biāo)準(zhǔn)庫(kù)×xls
xlwt標(biāo)準(zhǔn)庫(kù)×xls
openpyxl第三方庫(kù)xlsx

2.4.整體思路

當(dāng)使用以上幾個(gè)模塊的時(shí)候,從理論上我們就可以完全操作不同格式的Excel的讀和寫,很多人就疑惑,那這篇文章的作用是什么?我們直接學(xué)習(xí)對(duì)應(yīng)的這三個(gè)模塊不就好了嗎?答案就是:雖然這幾個(gè)庫(kù)已經(jīng)把Excel的文件、表、行、列的概念完全轉(zhuǎn)換為Python中的對(duì)象,但每次操作都需要遍歷每一個(gè)單元格,甚至很多時(shí)候我們要花費(fèi)大量的時(shí)間在思考循環(huán)單元格的邊界上,這本身就是在重復(fù)造輪子,因此我花了半天時(shí)間整理了以下六個(gè)函數(shù)。

方法名作用參數(shù)參數(shù)注釋返回值返回值注釋
read_xls_excel讀取xls格式Excel數(shù)據(jù)url,index(1)文件路徑,(2)工作表序號(hào)(第幾個(gè)工作表,傳入?yún)?shù)從1開(kāi)始數(shù))data表格中的數(shù)據(jù)
write_xls_excel寫入xls格式Excel數(shù)據(jù)url,sheet_name,two_dimensional_data(1)文件路徑,(2)表名,(3)將要寫入表格的數(shù)據(jù)(二維列表)
write_xls_excel_add追加寫入xls格式Excel數(shù)據(jù)url,two_dimensional_data,index(1)文件路徑,(2)將要寫入表格的數(shù)據(jù)(二維列表),(3)指定要追加的表的序號(hào)(第幾個(gè)工作表,傳入?yún)?shù)從1開(kāi)始數(shù))
read_xlsx_excel讀取xlsx格式Excel數(shù)據(jù)url,index(1)文件路徑,(2)工作表序號(hào)(第幾個(gè)工作表,傳入?yún)?shù)從1開(kāi)始數(shù))data表格中的數(shù)據(jù)
write_xlsx_excel寫入xlsx格式Excel數(shù)據(jù)url,sheet_name,two_dimensional_data(1)文件路徑,(2)表名,(3)將要寫入表格的數(shù)據(jù)(二維列表)
write_xlsx_excel_add追加寫入xlsx格式Excel數(shù)據(jù)url,sheet_name,two_dimensional_data(1)文件路徑,(2)表名,(3)將要寫入表格的數(shù)據(jù)(二維列表)

3.代碼展示

3.1.xls格式

3.1.1.讀取xls格式文件

'''讀取xls格式文件參數(shù):url:文件路徑index:工作表序號(hào)(第幾個(gè)工作表,傳入?yún)?shù)從1開(kāi)始數(shù))返回:data:表格中的數(shù)據(jù)'''defread_xls_excel(url,index):#打開(kāi)指定的工作簿workbook=xlrd.open_workbook(url)#獲取工作簿中的所有表格sheets=workbook.sheet_names#獲取工作簿中所有表格中的的第index個(gè)表格worksheet=workbook.sheet_by_name(sheets[index-1])#定義列表存儲(chǔ)表格數(shù)據(jù)data=[]#遍歷每一行數(shù)據(jù)foriinrange(0,worksheet.nrows):#定義表格存儲(chǔ)每一行數(shù)據(jù)da=[]#遍歷每一列數(shù)據(jù)forjinrange(0,worksheet.ncols):#將行數(shù)據(jù)存儲(chǔ)到da列表da.append(worksheet.cell_value(i,j))#存儲(chǔ)每一行數(shù)據(jù)data.append(da)#返回?cái)?shù)據(jù)returndata

3.1.2.寫入xls格式文件

'''寫入xls格式文件參數(shù):url:文件路徑sheet_name:表名two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)'''defwrite_xls_excel(url,sheet_name,two_dimensional_data):#創(chuàng)建工作簿對(duì)象workbook=xlwt.Workbook#創(chuàng)建工作表對(duì)象sheet=workbook.add_sheet(sheet_name)#遍歷每一行數(shù)據(jù)foriinrange(0,len(two_dimensional_data)):#遍歷每一列數(shù)據(jù)forjinrange(0,len(two_dimensional_data[i])):#寫入數(shù)據(jù)sheet.write(i,j,two_dimensional_data[i][j])#保存workbook.save(url)print('寫入成功')

3.1.3.追加寫入xls格式文件

'''追加寫入xls格式文件參數(shù):url:文件路徑two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)index:指定要追加的表的序號(hào)(第幾個(gè)工作表,傳入?yún)?shù)從1開(kāi)始數(shù))'''defwrite_xls_excel_add(url,two_dimensional_data,index):#打開(kāi)指定的工作簿workbook=xlrd.open_workbook(url)#獲取工作簿中的所有表格sheets=workbook.sheet_names#獲取指定的表worksheet=workbook.sheet_by_name(sheets[index-1])#獲取表格中已存在的數(shù)據(jù)的行數(shù)rows_old=worksheet.nrows#將xlrd對(duì)象拷貝轉(zhuǎn)化為xlwt對(duì)象new_workbook=copy(workbook)#獲取轉(zhuǎn)化后工作簿中的第index個(gè)表格new_worksheet=new_workbook.get_sheet(index-1)#遍歷每一行數(shù)據(jù)foriinrange(0,len(two_dimensional_data)):#遍歷每一列數(shù)據(jù)forjinrange(0,len(two_dimensional_data[i])):#追加寫入數(shù)據(jù),注意是從i+rows_old行開(kāi)始寫入new_worksheet.write(i+rows_old,j,two_dimensional_data[i][j])#保存工作簿new_workbook.save(url)print('追加寫入成功')

3.2.xlsx格式

3.2.1.讀取xlsx格式文件

'''讀取xlsx格式文件參數(shù):url:文件路徑sheet_name:表名返回:data:表格中的數(shù)據(jù)'''defread_xlsx_excel(url,sheet_name):#使用openpyxl加載指定路徑的Excel文件并得到對(duì)應(yīng)的workbook對(duì)象workbook=openpyxl.load_workbook(url)#根據(jù)指定表名獲取表格并得到對(duì)應(yīng)的sheet對(duì)象sheet=workbook[sheet_name]#定義列表存儲(chǔ)表格數(shù)據(jù)data=[]#遍歷表格的每一行forrowinsheet.rows:#定義表格存儲(chǔ)每一行數(shù)據(jù)da=[]#從每一行中遍歷每一個(gè)單元格forcellinrow:#將行數(shù)據(jù)存儲(chǔ)到da列表da.append(cell.value)#存儲(chǔ)每一行數(shù)據(jù)data.append(da)#返回?cái)?shù)據(jù)returndata

3.2.2.寫入xlsx格式文件

'''寫入xlsx格式文件參數(shù):url:文件路徑sheet_name:表名two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)'''defwrite_xlsx_excel(url,sheet_name,two_dimensional_data):#創(chuàng)建工作簿對(duì)象workbook=openpyxl.Workbook#創(chuàng)建工作表對(duì)象sheet=workbook.active#設(shè)置該工作表的名字sheet.title=sheet_name#遍歷表格的每一行foriinrange(0,len(two_dimensional_data)):#遍歷表格的每一列forjinrange(0,len(two_dimensional_data[i])):#寫入數(shù)據(jù)(注意openpyxl的行和列是從1開(kāi)始的,和我們平時(shí)的認(rèn)知是一樣的)sheet.cell(row=i+1,column=j+1,value=str(two_dimensional_data[i][j]))#保存到指定位置workbook.save(url)print('寫入成功')

3.2.3.追加寫入xlsx格式文件

'''追加寫入xlsx格式文件參數(shù):url:文件路徑sheet_name:表名two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)'''defwrite_xlsx_excel_add(url,sheet_name,two_dimensional_data):#使用openpyxl加載指定路徑的Excel文件并得到對(duì)應(yīng)的workbook對(duì)象workbook=openpyxl.load_workbook(url)#根據(jù)指定表名獲取表格并得到對(duì)應(yīng)的sheet對(duì)象sheet=workbook[sheet_name]fortddintwo_dimensional_data:sheet.append(tdd)#保存到指定位置workbook.save(url)print('追加寫入成功')

4.結(jié)果測(cè)試

4.1.讀取測(cè)試

先準(zhǔn)備兩個(gè)Excel文件,如圖所示

點(diǎn)擊加載圖片

其內(nèi)容如下:

點(diǎn)擊加載圖片

點(diǎn)擊加載圖片

測(cè)試代碼:

點(diǎn)擊加載圖片

輸出結(jié)果:

點(diǎn)擊加載圖片

結(jié)論:表明讀取并沒(méi)有問(wèn)題?。?!接下來(lái)測(cè)試寫入

4.2.寫入測(cè)試

測(cè)試代碼:

點(diǎn)擊加載圖片

結(jié)果輸出:

點(diǎn)擊加載圖片

看到數(shù)據(jù)被覆蓋了?。?!接下來(lái)在上面修改后的數(shù)據(jù)的基礎(chǔ)上測(cè)試追加寫入

4.3.追加寫入測(cè)試

測(cè)試代碼:

點(diǎn)擊加載圖片

結(jié)果輸出:

點(diǎn)擊加載圖片

追加也沒(méi)有問(wèn)題?。?/p>

5.總結(jié)

我一直認(rèn)為數(shù)據(jù)分析就應(yīng)該以數(shù)據(jù)為主,而不應(yīng)該把大量的代碼花費(fèi)在設(shè)計(jì)Excel表格的樣式上,這樣多少就有點(diǎn)主客顛倒的意思了。總之,希望這篇文章對(duì)正在學(xué)習(xí)Python的你有一定的幫助,如果對(duì)你有幫助的話,不妨點(diǎn)個(gè)贊和收藏吧!如果有什么意見(jiàn)和建議也歡迎在評(píng)論區(qū)留言!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧洲自拍偷拍一区二区| 国产精品午夜性色视频| 日韩不卡一区二区视频| 日韩中文字幕有码午夜美女| 人妻少妇久久中文字幕久久| 伊人欧美一区二区三区| 欧美一区日韩一区日韩一区| 东京干男人都知道的天堂| 国产精品成人又粗又长又爽| 欧美黄色成人真人视频| 午夜国产精品福利在线观看| 又色又爽又无遮挡的视频| 久久99午夜福利视频| 激情少妇一区二区三区| 欧美日韩国产综合在线| 亚洲av熟女一区二区三区蜜桃| 亚洲av熟女一区二区三区蜜桃| 欧美一级内射一色桃子| 三级高清有码在线观看| 男人和女人黄 色大片| 精品综合欧美一区二区三区| 国产欧美韩日一区二区三区| 又黄又色又爽又免费的视频| 亚洲熟妇av一区二区三区色堂| 午夜精品久久久99热连载| 91超精品碰国产在线观看| 国产又粗又长又大的视频| 亚洲午夜av久久久精品| 久久精品一区二区少妇| 日本免费一级黄色录像| 色婷婷久久五月中文字幕| 国产精品久久精品毛片| 精品人妻一区二区三区免费| 日韩在线视频精品中文字幕| 亚洲男人天堂网在线视频| 国产又粗又猛又长又大| 国产中文字幕久久黄色片| 成人国产激情在线视频| 日本福利写真在线观看| 亚洲精品一区三区三区| 日系韩系还是欧美久久|