1.寫在前面 2.前期準(zhǔn)備 2.1.初識Excel 2.2.格式區(qū)別 2.3.庫的使用 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é)果測試 4.1.讀取測試 4.2.寫入測試 4.3.追加寫入測試 5.總結(jié) 點擊加載圖片 1.寫在前面 對比其它編程語言,我們都知道Python最大的優(yōu)勢是代碼簡單,有豐富的第三方開源庫供開發(fā)者使用。伴隨著近幾年數(shù)據(jù)分析的熱度,Python也成為最受歡迎的編程語言之一。而對于數(shù)據(jù)的讀取和存儲,對于普通人來講,除了數(shù)據(jù)庫之外,最常見的就是微軟的Excel。 2.前期準(zhǔn)備 2.1.初識Excel MicrosoftExcel是Microsoft為使用Windows和AppleMacintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。 2.2.格式區(qū)別 Excel中有xls和xlsx兩種格式,它們之間的區(qū)別是: 文件格式不同。xls是一個特有的二進制格式,其核心結(jié)構(gòu)是復(fù)合文檔類型的結(jié)構(gòu),而xlsx的核心結(jié)構(gòu)是XML類型的結(jié)構(gòu),采用的是基于XML的壓縮方式,使其占用的空間更小。xlsx中最后一個x的意義就在于此。 版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。 兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。 2.3.庫的使用 Python自帶的模塊中有針對xls格式的xlrd和xlwt模塊,但這兩個庫僅僅是針對xls的操作,當(dāng)我們要操作xlsx格式文件時,則需要使用到openpyxl第三方庫。
2.4.整體思路 當(dāng)使用以上幾個模塊的時候,從理論上我們就可以完全操作不同格式的Excel的讀和寫,很多人就疑惑,那這篇文章的作用是什么?我們直接學(xué)習(xí)對應(yīng)的這三個模塊不就好了嗎?答案就是:雖然這幾個庫已經(jīng)把Excel的文件、表、行、列的概念完全轉(zhuǎn)換為Python中的對象,但每次操作都需要遍歷每一個單元格,甚至很多時候我們要花費大量的時間在思考循環(huán)單元格的邊界上,這本身就是在重復(fù)造輪子,因此我花了半天時間整理了以下六個函數(shù)。
3.代碼展示 3.1.xls格式 3.1.1.讀取xls格式文件 '''讀取xls格式文件參數(shù):url:文件路徑index:工作表序號(第幾個工作表,傳入?yún)?shù)從1開始數(shù))返回:data:表格中的數(shù)據(jù)'''defread_xls_excel(url,index):#打開指定的工作簿workbook=xlrd.open_workbook(url)#獲取工作簿中的所有表格sheets=workbook.sheet_names#獲取工作簿中所有表格中的的第index個表格worksheet=workbook.sheet_by_name(sheets[index-1])#定義列表存儲表格數(shù)據(jù)data=[]#遍歷每一行數(shù)據(jù)foriinrange(0,worksheet.nrows):#定義表格存儲每一行數(shù)據(jù)da=[]#遍歷每一列數(shù)據(jù)forjinrange(0,worksheet.ncols):#將行數(shù)據(jù)存儲到da列表da.append(worksheet.cell_value(i,j))#存儲每一行數(shù)據(jù)data.append(da)#返回數(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)建工作簿對象workbook=xlwt.Workbook#創(chuàng)建工作表對象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:指定要追加的表的序號(第幾個工作表,傳入?yún)?shù)從1開始數(shù))'''defwrite_xls_excel_add(url,two_dimensional_data,index):#打開指定的工作簿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對象拷貝轉(zhuǎn)化為xlwt對象new_workbook=copy(workbook)#獲取轉(zhuǎn)化后工作簿中的第index個表格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行開始寫入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文件并得到對應(yīng)的workbook對象workbook=openpyxl.load_workbook(url)#根據(jù)指定表名獲取表格并得到對應(yīng)的sheet對象sheet=workbook[sheet_name]#定義列表存儲表格數(shù)據(jù)data=[]#遍歷表格的每一行forrowinsheet.rows:#定義表格存儲每一行數(shù)據(jù)da=[]#從每一行中遍歷每一個單元格forcellinrow:#將行數(shù)據(jù)存儲到da列表da.append(cell.value)#存儲每一行數(shù)據(jù)data.append(da)#返回數(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)建工作簿對象workbook=openpyxl.Workbook#創(chuàng)建工作表對象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開始的,和我們平時的認(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文件并得到對應(yīng)的workbook對象workbook=openpyxl.load_workbook(url)#根據(jù)指定表名獲取表格并得到對應(yīng)的sheet對象sheet=workbook[sheet_name]fortddintwo_dimensional_data:sheet.append(tdd)#保存到指定位置workbook.save(url)print('追加寫入成功') 4.結(jié)果測試 4.1.讀取測試 先準(zhǔn)備兩個Excel文件,如圖所示 點擊加載圖片 其內(nèi)容如下: 點擊加載圖片 點擊加載圖片 測試代碼: 點擊加載圖片 輸出結(jié)果: 點擊加載圖片 結(jié)論:表明讀取并沒有問題?。?!接下來測試寫入 4.2.寫入測試 測試代碼: 點擊加載圖片 結(jié)果輸出: 點擊加載圖片 看到數(shù)據(jù)被覆蓋了?。?!接下來在上面修改后的數(shù)據(jù)的基礎(chǔ)上測試追加寫入 4.3.追加寫入測試 測試代碼: 點擊加載圖片 結(jié)果輸出: 點擊加載圖片 追加也沒有問題??! 5.總結(jié) 我一直認(rèn)為數(shù)據(jù)分析就應(yīng)該以數(shù)據(jù)為主,而不應(yīng)該把大量的代碼花費在設(shè)計Excel表格的樣式上,這樣多少就有點主客顛倒的意思了??傊M@篇文章對正在學(xué)習(xí)Python的你有一定的幫助,如果對你有幫助的話,不妨點個贊和收藏吧!如果有什么意見和建議也歡迎在評論區(qū)留言! |
|
來自: 江南荷葉 > 《電腦技術(shù)》