用python操作Excel表格的最佳方法K貉酢A鏊酢喇完!

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):

image

以上可以根據(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

image

pip install xlwt

image

pip install xlutils

image

寫入 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 文件一屋,打開文件查看如下圖所示:

image.png
image.png

以上就是寫入 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é)果如下:

輸出結(jié)果.png

細(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é)果如下:


image.png

image.png

格式轉(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é)果:

image.png

可以看出鸳君,使用代碼我們可以對(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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末平挑,一起剝皮案震驚了整個(gè)濱河市游添,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌通熄,老刑警劉巖唆涝,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唇辨,居然都是意外死亡廊酣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門赏枚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亡驰,“玉大人晓猛,你說我怎么就攤上這事》踩瑁” “怎么了戒职?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長透乾。 經(jīng)常有香客問我洪燥,道長,這世上最難降的妖魔是什么续徽? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任蚓曼,我火速辦了婚禮亲澡,結(jié)果婚禮上钦扭,老公的妹妹穿的比我還像新娘。我一直安慰自己床绪,他們只是感情好客情,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著癞己,像睡著了一般膀斋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痹雅,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天仰担,我揣著相機(jī)與錄音,去河邊找鬼绩社。 笑死摔蓝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愉耙。 我是一名探鬼主播贮尉,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼朴沿!你這毒婦竟也來了猜谚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤赌渣,失蹤者是張志新(化名)和其女友劉穎魏铅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坚芜,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡览芳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了货岭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片路操。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疾渴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屯仗,到底是詐尸還是另有隱情搞坝,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布魁袜,位于F島的核電站桩撮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峰弹。R本人自食惡果不足惜店量,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞠呈。 院中可真熱鬧融师,春花似錦、人聲如沸蚁吝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窘茁。三九已至怀伦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間山林,已是汗流浹背房待。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驼抹,地道東北人桑孩。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像砂蔽,于是被迫代替她去往敵國和親洼怔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容