Python 操作 Excel
數(shù)據(jù)處理是 Python 的一大應(yīng)用場景,而 Excel 又是當(dāng)前最流行的數(shù)據(jù)處理軟件剥啤。因此用 Python 進(jìn)行數(shù)據(jù)處理時(shí)锦溪,很容易會(huì)和 Excel 打起交道。得益于前人的辛勤勞作府怯,Python 處理 Excel 已有很多現(xiàn)成的輪子刻诊,比如xlrd & xlwt & xlutils、XlsxWriter牺丙、OpenPyXL则涯,而在 Windows 平臺(tái)上可以直接調(diào)用 Microsoft Excel 的開放接口,這些都是比較常用的工具冲簿,還有其他一些優(yōu)秀的工具這里就不一一介紹孽文,接下來我們通過一個(gè)表格展示各工具之間的特點(diǎn):
以上可以根據(jù)需求不同唇跨,選擇合適的工具,現(xiàn)在為大家主要介紹下最常用的 xlrd & xlwt & xlutils 系列工具的使用。
xlrd & xlwt & xlutils 介紹
xlrd&xlwt&xlutils 是由以下三個(gè)庫組成:
xlrd:用于讀取 Excel 文件肥隆;
xlwt:用于寫入 Excel 文件;
xlutils:用于操作 Excel 文件的實(shí)用工具掷匠,比如復(fù)制纠屋、分割、篩選等惨险;
安裝庫
安裝比較簡單羹幸,直接用 pip 工具安裝三個(gè)庫即可,安裝命令如下:
pip install xlrd
pip install xlwt
pip install xlutils
寫入 Excel
接下來我們就從寫入 Excel 開始辫愉,話不多說直接看代碼如下:
# 導(dǎo)入 xlwt 庫
import xlwt
# 創(chuàng)建 xls 文件對(duì)象
wb = xlwt.Workbook()
# 新增兩個(gè)表單頁
sh1 = wb.add_sheet('成績')
sh2 = wb.add_sheet('匯總')
# 然后按照位置來添加數(shù)據(jù),第一個(gè)參數(shù)是行栅受,第二個(gè)參數(shù)是列
# 寫入第一個(gè)sheet
sh1.write(0, 0, '姓名')
sh1.write(0, 1, '專業(yè)')
sh1.write(0, 2, '科目')
sh1.write(0, 3, '成績')
sh1.write(1, 0, '張三')
sh1.write(1, 1, '信息與通信工程')
sh1.write(1, 2, '數(shù)值分析')
sh1.write(1, 3, 88)
sh1.write(2, 0, '李四')
sh1.write(2, 1, '物聯(lián)網(wǎng)工程')
sh1.write(2, 2, '數(shù)字信號(hào)處理分析')
sh1.write(2, 3, 95)
sh1.write(3, 0, '王華')
sh1.write(3, 1, '電子與通信工程')
sh1.write(3, 2, '模糊數(shù)學(xué)')
sh1.write(3, 3, 90)
# 寫入第二個(gè)sheet
sh2.write(0, 0, '總分')
sh2.write(1, 0, 273)
# 最后保存文件即可
wb.save('test.xls')
運(yùn)行代碼,結(jié)果會(huì)看到生成名為 test.xls 的 Excel 文件一屋,打開文件查看如下圖所示:
以上就是寫入 Excel 的代碼窘疮,是不是很簡單,下面我們?cè)賮砜聪伦x取 Excel 該如何操作冀墨。
讀取 Excel
讀取 Excel 其實(shí)也不難闸衫,請(qǐng)看如下代碼:
# 導(dǎo)入 xlrd 庫
import xlrd
# 打開剛才我們寫入的 test_w.xls 文件
wb = xlrd.open_workbook("test.xls")
# 獲取并打印 sheet 數(shù)量
print( "sheet 數(shù)量:", wb.nsheets)
# 獲取并打印 sheet 名稱
print( "sheet 名稱:", wb.sheet_names())
# 根據(jù) sheet 索引獲取內(nèi)容
sh1 = wb.sheet_by_index(0)
# 或者
# 也可根據(jù) sheet 名稱獲取內(nèi)容
# sh = wb.sheet_by_name('成績')
# 獲取并打印該 sheet 行數(shù)和列數(shù)
print( u"sheet %s 共 %d 行 %d 列" % (sh1.name, sh1.nrows, sh1.ncols))
# 獲取并打印某個(gè)單元格的值
print( "第一行第二列的值為:", sh1.cell_value(0, 1))
# 獲取整行或整列的值
rows = sh1.row_values(0) # 獲取第一行內(nèi)容
cols = sh1.col_values(1) # 獲取第二列內(nèi)容
# 打印獲取的行列值
print( "第一行的值為:", rows)
print( "第二列的值為:", cols)
# 獲取單元格內(nèi)容的數(shù)據(jù)類型
print( "第二行第一列的值類型為:", sh1.cell(1, 0).ctype)
# 遍歷所有表單內(nèi)容
for sh in wb.sheets():
for r in range(sh.nrows):
# 輸出指定行
print( sh.row(r))
輸出結(jié)果如下:
細(xì)心的朋友可能注意到,這里我們可以獲取到單元格的類型诽嘉,上面我們讀取類型時(shí)獲取的是數(shù)字1蔚出,那1表示什么類型弟翘,又都有什么類型呢?別急下面我們通過一個(gè)表格展示下:
通過上面表格骄酗,我們可以知道剛獲取單元格類型返回的數(shù)字1對(duì)應(yīng)的就是字符串類型稀余。
修改 excel
上面說了寫入和讀取 Excel 內(nèi)容,接下來我們就說下更新修改 Excel 該如何操作趋翻,修改時(shí)就需要用到 xlutils 中的方法了睛琳。直接上代碼,來看下最簡單的修改操作:
# 導(dǎo)入相應(yīng)模塊
import xlrd
from xlutils.copy import copy
# 打開 excel 文件
readbook = xlrd.open_workbook("test.xls")
# 復(fù)制一份
wb = copy(readbook)
# 選取第一個(gè)表單
sh1 = wb.get_sheet(0)
# 在第五行新增寫入數(shù)據(jù)
sh1.write(4, 0, '王歡')
sh1.write(4, 1, '通信工程')
sh1.write(4, 2, '機(jī)器學(xué)習(xí)')
sh1.write(4, 3, 89)
# 選取第二個(gè)表單
sh1 = wb.get_sheet(1)
# 替換總成績數(shù)據(jù)
sh1.write(1, 0, 362)
# 保存
wb.save('test.xls')
從上面代碼可以看出踏烙,這里的修改 Excel 是通過 xlutils 庫的 copy 方法將原來的 Excel 整個(gè)復(fù)制一份师骗,然后再做修改操作,最后再保存讨惩”侔看下修改結(jié)果如下:
格式轉(zhuǎn)換操作
在平時(shí)我們使用 Excel 時(shí)會(huì)對(duì)數(shù)據(jù)進(jìn)行一下格式化,或者樣式設(shè)置荐捻,在這里把上面介紹寫入的代碼簡單修改下黍少,使輸出的格式稍微改變一下,代碼如下:
# 導(dǎo)入 xlwt 庫
import xlwt
# 設(shè)置寫出格式字體紅色加粗
styleBR = xlwt.easyxf('font: name Times New Roman, color-index red, bold on')
# 設(shè)置數(shù)字型格式為小數(shù)點(diǎn)后保留兩位
styleNum = xlwt.easyxf(num_format_str='#,##0.00')
# 設(shè)置日期型格式顯示為YYYY-MM-DD
styleDate = xlwt.easyxf(num_format_str='YYYY-MM-DD')
# 創(chuàng)建 xls 文件對(duì)象
wb = xlwt.Workbook()
# 新增兩個(gè)表單頁
sh1 = wb.add_sheet('成績')
sh2 = wb.add_sheet('匯總')
# 然后按照位置來添加數(shù)據(jù),第一個(gè)參數(shù)是行处面,第二個(gè)參數(shù)是列
sh1.write(0, 0, '姓名', styleBR) # 設(shè)置表頭字體為紅色加粗
sh1.write(0, 1, '日期', styleBR) # 設(shè)置表頭字體為紅色加粗
sh1.write(0, 2, '成績', styleBR) # 設(shè)置表頭字體為紅色加粗
# 插入數(shù)據(jù)
sh1.write(1, 0, '張三',)
sh1.write(1, 1, '2020-07-01', styleDate)
sh1.write(1, 2, 90, styleNum)
sh1.write(2, 0, '李四')
sh1.write(2, 1, '2020-08-02')
sh1.write(2, 2, 95, styleNum)
# 設(shè)置單元格內(nèi)容居中的格式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
style = xlwt.XFStyle()
style.alignment = alignment
# 合并A4,B4單元格厂置,并將內(nèi)容設(shè)置為居中
sh1.write_merge(3, 3, 0, 1, '總分', style)
# 通過公式,計(jì)算C2+C3單元格的和
sh1.write(3, 2, xlwt.Formula("C2+C3"))
# 對(duì) sheet2 寫入數(shù)據(jù)
sh2.write(0, 0, '總分', styleBR)
sh2.write(1, 0, 185)
# 最后保存文件即可
wb.save('test.xls')
輸出結(jié)果:
可以看出鸳君,使用代碼我們可以對(duì)字體农渊,顏色、對(duì)齊或颊、合并等平時(shí) Excel 的操作進(jìn)行設(shè)置砸紊,也可以格式化日期和數(shù)字類型的數(shù)據(jù)。當(dāng)然了這里只是介紹了部分功能囱挑,不過這已經(jīng)足夠我們?nèi)粘J褂昧俗硗纾肓私飧喙δ懿僮骺梢詤⒖脊倬W(wǎng)。
python-excel官網(wǎng):www.python-excel.org/