最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python操作Excel數(shù)據(jù)的封裝函數(shù)分享

 更新時間:2022年11月16日 10:03:36   作者:印象python  
對比其它編程語言,我們都知道Python最大的優(yōu)勢是代碼簡單,有豐富的第三方開源庫供開發(fā)者使用。而對于數(shù)據(jù)的讀取和存儲,對于普通人來講,除了數(shù)據(jù)庫之外,最常見的就是微軟的Excel。本文為大家準(zhǔn)備了Python操作Excel數(shù)據(jù)的封裝函數(shù),希望對大家有所幫助

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

1. 前期準(zhǔn)備

1.1. 初識Excel

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

1.2. 格式區(qū)別

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

  • 文件格式不同。xls是一個特有的二進(jìn)制格式,其核心結(jié)構(gòu)是復(fù)合文檔類型的結(jié)構(gòu),而xlsx的核心結(jié)構(gòu)是XML類型的結(jié)構(gòu),采用的是基于 XML的壓縮方式,使其占用的空間更小。xlsx 中最后一個 x 的意義就在于此。
  • 版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。
  • 兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。

1.3. 庫的使用

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

1.4. 整體思路

當(dāng)使用以上幾個模塊的時候,從理論上我們就可以完全操作不同格式的Excel的讀和寫,很多人就疑惑,那這篇文章的作用是什么?我們直接學(xué)習(xí)對應(yīng)的這三個模塊不就好了嗎?

答案就是:雖然這幾個庫已經(jīng)把Excel的文件、表、行、列的概念完全轉(zhuǎn)換為Python中的對象,但每次操作都需要遍歷每一個單元格,甚至很多時候我們要花費大量的時間在思考循環(huán)單元格的邊界上,這本身就是在重復(fù)造輪子,因此我花了半天時間整理了以下六個函數(shù)。

2. 代碼展示

2.1. xlz格式

2.1.1. 讀取xls格式文件

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

2.1.2. 寫入xls格式文件

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

2.1.3. 追加寫入xls格式文件

def?write_xls_excel_add(url,?two_dimensional_data,?index):
????'''
????追加寫入xls格式文件
????參數(shù):
????????url:文件路徑
??????? two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)
??????? index:指定要追加的表的序號(第幾個工作表,傳入?yún)?shù)從1開始數(shù))
????'''
????#?打開指定的工作簿
????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ù)
????for?i?in?range(0,?len(two_dimensional_data)):
????????#?遍歷每一列數(shù)據(jù)
????????for?j?in?range(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("追加寫入成功")

2.2. xlsx格式

2.2.1. 讀取xlsx格式文件

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

2.2.2. 寫入xlsx格式文件

def?write_xlsx_excel(url,?sheet_name,?two_dimensional_data):
????'''
????寫入xlsx格式文件
????參數(shù):
????????url:文件路徑
????????sheet_name:表名
??????? two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)
????'''
????#?創(chuàng)建工作簿對象
????workbook?=?openpyxl.Workbook()
????#?創(chuàng)建工作表對象
????sheet?=?workbook.active
????#?設(shè)置該工作表的名字
????sheet.title?=?sheet_name
????#?遍歷表格的每一行
????for?i?in?range(0,?len(two_dimensional_data)):
????????#?遍歷表格的每一列
????????for?j?in?range(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("寫入成功")

2.2.3. 追加寫入xlsx格式文件

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

3. 結(jié)果測試

3.1. 讀取測試

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

其內(nèi)容如下:

測試代碼:

data1=read_xlsx_excel(r'D:\ii\aa.xlsx',"Sheet1")
data2=read_xlsx_excel(r'D:\ii\bb.xls',1)
for da in data1:
    print(da)
print("------------")
for da2 in data1:
    print(da2)

輸出結(jié)果:

結(jié)論:表明讀取并沒有問題?。。〗酉聛頊y試寫入

3.2. 寫入測試

測試代碼:

uio=[[1,"adsf"],[5,3],[5,"你好"]]
iuo=[[1,2],["adf",3],[5,"你好"]]
wirte_xlsx_excel(r'D:\ii\aa.xlsx',"Sheet1",uio)
wirte_xlsx_excel(r'D:\ii\bb.xls',"Sheet1",iuo)

結(jié)果輸出:

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

3.3. 追加寫入測試

測試代碼:

li=[[1,"add"],[1,"加入"]]
write_xlsx_excel_add(r'D:\ii\bb.xls',li,1)
kk=[[1,"woshilie"],[4,"列"]]
write_xlsx_excel_add(r'D:\ii\aa.xlsx',"Sheet1",kk)

結(jié)果輸出:

追加也沒有問題!!

4. 總結(jié)

我們一直認(rèn)為數(shù)據(jù)分析就應(yīng)該以數(shù)據(jù)為主,而不應(yīng)該把大量的代碼花費在設(shè)計Excel表格的樣式上,這樣多少就有點主客顛倒的意思了。

到此這篇關(guān)于Python操作Excel數(shù)據(jù)的封裝函數(shù)分享的文章就介紹到這了,更多相關(guān)Python操作Excel數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python利用lxml讀寫xml格式的文件

    python利用lxml讀寫xml格式的文件

    這篇文章主要為大家詳細(xì)介紹了python利用lxml讀寫xml格式的文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • python實現(xiàn)線性回歸的示例代碼

    python實現(xiàn)線性回歸的示例代碼

    線性回歸就是通過多次取點,找出符合函數(shù)的曲線,那么就可以完成一維線性回歸,本文通過實例代碼給大家介紹python實現(xiàn)線性回歸的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • TensorFlow神經(jīng)網(wǎng)絡(luò)創(chuàng)建多層感知機MNIST數(shù)據(jù)集

    TensorFlow神經(jīng)網(wǎng)絡(luò)創(chuàng)建多層感知機MNIST數(shù)據(jù)集

    這篇文章主要為大家介紹了TensorFlow神經(jīng)網(wǎng)絡(luò)如何創(chuàng)建多層感知機MNIST數(shù)據(jù)集的實現(xiàn)過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Python實現(xiàn)在PDF中添加數(shù)字簽名

    Python實現(xiàn)在PDF中添加數(shù)字簽名

    無論是商業(yè)文件、法律文件還是個人文件,都可能需要證明其來源的真實性和完整性,PDF數(shù)字簽名就是解決這些問題的關(guān)鍵工具,下面我們來看看如何使用?Python?為PDF文檔添加數(shù)字簽名吧
    2025-01-01
  • Python中的shutil模塊使用詳解

    Python中的shutil模塊使用詳解

    這篇文章主要介紹了Python中的shutil模塊使用詳解,shutil庫作為os模塊的補充,提供了復(fù)制、移動、刪除、壓縮、解壓等操作,這些 os 模塊中一般是沒有提供的,需要的朋友可以參考下
    2023-09-09
  • Python處理缺失值的8種不同方法實例

    Python處理缺失值的8種不同方法實例

    缺失值是指粗糙數(shù)據(jù)中由于缺少信息而造成的數(shù)據(jù)的聚類、分組、刪失或截斷,下面這篇文章主要給大家介紹了關(guān)于Python處理缺失值的8種不同方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • python把一個字符串切開的實例方法

    python把一個字符串切開的實例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python把一個字符串切開的實例方法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-09-09
  • python中函數(shù)默認(rèn)值使用注意點詳解

    python中函數(shù)默認(rèn)值使用注意點詳解

    下面小編就為大家?guī)硪黄猵ython中函數(shù)默認(rèn)值使用注意點詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用Python結(jié)合Tkinter和PyAutoGUI開發(fā)精確截圖工具

    使用Python結(jié)合Tkinter和PyAutoGUI開發(fā)精確截圖工具

    在日常工作中,截圖是一個非常常見的需求,雖然?Windows?自帶截圖工具,但有時我們需要更精確的截圖方式,比如選取特定區(qū)域、快速保存截圖并進(jìn)行預(yù)覽,本篇博客將介紹一個使用?Python?結(jié)合?Tkinter?和?PyAutoGUI?開發(fā)的精確截圖工具,需要的朋友可以參考下
    2025-03-03
  • Python+logging輸出到屏幕將log日志寫入文件

    Python+logging輸出到屏幕將log日志寫入文件

    這篇文章主要給大家介紹了關(guān)于Python+logging輸出到屏幕將log日志寫入文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論

东光县| 平陆县| 宣化县| 泸溪县| 江北区| 大洼县| 申扎县| 九江县| 融水| 全南县| 陈巴尔虎旗| 舟山市| 西青区| 南平市| 新疆| 揭阳市| 沙湾县| 晋中市| 鸡东县| 东乌珠穆沁旗| 繁峙县| 东乌珠穆沁旗| 阜阳市| 广灵县| 建阳市| 岱山县| 萨迦县| 确山县| 合阳县| 呼图壁县| 大邑县| 普陀区| 兴义市| 双鸭山市| 宜宾市| 房产| 贵港市| 九江县| 湘潭市| 岳池县| 香港 |