Python幫你做Excel——讀取excel文檔

相信很多坐在辦公室上班的朋友每天都需要處理大量的數(shù)據(jù)如叼,我們常常用Excel制作電子表格來幫助我們處理它們。這當然是一種非常好的做法雄可,但是我相信大家都會發(fā)現(xiàn)芯侥,很多表格的內容其實大同小異,常常需要我們把同樣的數(shù)據(jù)復制進不同的表格里去雁歌,整理格式,然后提交給不同的人知残。這樣沒有意義的重復勞動會占用我們大量寶貴的時間靠瞎。如果有什么人能幫我們把表格做好,我們只需確認一下是否有誤然后提交即可求妹,那么生活將會變得多么美好乏盐。

Openpyxl就是這樣一個得力的工具。

這是一個由Eric Gazoni和Charlie Clark開發(fā)的制恍,是目前使用最廣泛的用Python操作Excel的庫開源庫父能,也是Pandas中默認讀取表格數(shù)據(jù)的工具。

那么這個系列的文章——Python幫你做Excel——就是給大家提供一個簡單的Openpyxl的入門中文教程净神,讓大家能快速上手這個好用的小工具何吝。這個基礎教程的來源于Python Excel網(wǎng)站,再加入筆者的一些想法鹃唯。有興趣的朋友可以訪問:

https://www.pythonexcel.com/

首先讓我們一起看一下爱榕,如何使用Openpyxl讀取Excel文檔中的數(shù)據(jù)。

openpyxl基礎概念

  • Excel文件通常被稱為電子表格坡慌,但在openpyxl中被稱為工作簿
  • 單個工作簿通常保存在擴展名為.xlsx的文件中
  • 一個工作簿可能只有一個工作表黔酥,也可能有幾十個工作表
  • 活動工作表是用戶正在查看或關閉文件前查看的工作表
  • 每個工作表都由列組成,列的名字從A開始依次類推
  • 每個工作表都由行組成洪橘,每個行從1開始編號跪者,依次類推
  • 行與列的交界處稱為單元格。每個單元格對于對應的行和列就有了特定的地址熄求。單元格內可以包含數(shù)字渣玲,公式或者文字
  • 單元格組成的網(wǎng)格在excel中組成了工作區(qū)域或者說工作表

從Excel工作表中讀取數(shù)據(jù)

首先我們假設建一個Excel文件,命名為testfile.xlsx抡四。

示例表格數(shù)據(jù)

以上是testfile.xlsx的數(shù)據(jù)柜蜈,你可以新建一個excel文件并把數(shù)據(jù)填進去。
不過在正式使用openpyxl讀取這些數(shù)據(jù)之前指巡,如果你不知道python的根目錄在哪淑履,你可以在prompt(中文可以理解為命令提示符,或對話框)中輸入如下代碼

>>>import os  
>>>os.getcwd( )

上述操作會在python中導入操作系統(tǒng)包藻雪,然后os.getcwd( )會讀取當下的工作地址(get current working directory ——> getcwd() )秘噪。隨后python會告訴你當下的工作地址,輸出的結果可能會是這樣

'C:\\Python36'

如果你想更換工作地址勉耀,就需要使用命令os.chdir()指煎。比如你想讀取一個在C盤根目錄下的一個叫做myfiles的文件夾里的文件蹋偏,那么你可能就可以輸入

>>>os.ch.dir("c:/myfiles")

現(xiàn)在你就可以對C盤里myfiles文件夾里的文件進行工作了!

用Python打開Excel文件

首先我們需要用這個語句在python中導入openpyxl模塊

>>> import openpyxl

如果沒有錯誤信息提示至壤,那就表示openpyxl模塊安裝正確威始,并且可以對excel文件進行操作了。接下來需要做的是載入工作簿testfile.xlsx

>>>wb= openpyxl.load_workbook('testfile.xlsx')

openpyxl.load_workbook()是一個函數(shù)像街,它將文件名作為參數(shù)讀入然后返回一個工作簿的數(shù)據(jù)類型(workbook datatype)黎棠。工作簿數(shù)據(jù)類型實際上與python打開文件對象的類型是一樣的,使用下述的語句可以看到對handle的說明:

>>type (wb)  
<class 'openpyxl.workbook.workbook.Workbook'>

上面的第二行文字應該會顯示在對話框中镰绎,此處我們對前面所有輸入的命令進行個簡單的匯總展示

>>> import os  
>>> os.getcwd()  
'C:\\Python34'  
>>> import openpyxl  
>>> wb=openpyxl.load_workbook('testfile.xlsx')  
>>> type(wb)  
<class 'openpyxl.workbook.workbook.Workbook'>  
>>>

從加載的工作簿訪問工作表

現(xiàn)在我們已經(jīng)能夠訪問excel文件了脓斩,現(xiàn)在我們可以嘗試讀取文件里的數(shù)據(jù)。首先畴栖,如果想要訪問工作簿中工作表的數(shù)量以及它們的名字随静,可以使用函數(shù)get_sheet_names()。這個函數(shù)會返回工作表的名字吗讶,當然你也可以數(shù)出工作表的總數(shù)燎猛。完整的代碼是這樣的

>>> wb.get_sheet_names()  
['Sheet1', 'Sheet2', 'Sheet3']

可以看到函數(shù)返回了三個工作表的名字,也就是說工作簿內只含有三個工作表关翎。那么現(xiàn)在你可以嘗試多操作幾次频轿,比如手動修改這些工作表的名字败富,然后保存文件勤众,隨后用上述代碼重新加載文件赖临,看看工作表的名字是否有變動,當然此處就不再多加贅述了爽茴。
在知道了工作表的名字之后葬凳,我們可以訪問其中的任何一個工作表了。假設我們想要訪問Sheet3室奏,代碼就應該是

>>> import openpyxl  
>>> wb=openpyxl.load_workbook('testfile.xlsx')  
>>> wb.get_sheet_names()  
['Sheet1', 'Sheet2', 'Sheet3']  
>>> sheet=wb.get_sheet_by_name('Sheet3')

函數(shù)get_sheet_by_name('Sheet3')可以訪問一個特定的工作表火焰,它接收工作表的名字作為輸入,然后返回一個工作表對象胧沫。我們將其賦值給sheet變量昌简,然后就可以對它進行下述操作

>>> sheet  
<Worksheet "Sheet3">  
>>> type(sheet)  
<class 'openpyxl.worksheet.worksheet.Worksheet'>  
>>> sheet.title  
'Sheet3'  
>>>

如果只輸入sheet,那么就會輸出绒怨,該變量指向哪個工作表纯赎。在這里例子里,對話框就會返回工作表"Sheet3"南蹂。如果想要知道該變量的類型犬金,則輸入type(sheet),此時就會返回變量sheet指向什么對象。sheet.title會返回sheet的標題晚顷。
另外峰伙,如果我們想訪問活動的工作表,可以使用下述代碼该默,對話框就會返回活動工作表的名字了

>>> wb.active  
<Worksheet "Sheet1">

訪問工作表單元格中的數(shù)據(jù)

從工作表單元格中訪問數(shù)據(jù)瞳氓,首先應用工作表,然后輸入單元格的地址栓袖,具體展示如下

>>> sheet['A2'].value  
datetime.datetime(2014, 7, 6, 4, 50, 30)

還有訪問單元格數(shù)據(jù)的另一個方法

>>> e=sheet['B2']  
>>> e.value  
'AB'  
>>> e.row  
2  
>>> e.column  
'B'  
>>>

還可以使用cell()函數(shù)顿膨,將row和column作為參數(shù)輸入,讀取單元格數(shù)據(jù)

>>> sheet.cell(row=2, column=4)  
<Cell Sheet1.D2>  
>>> sheet.cell(row=2, column=4).value  
'Pencil'

現(xiàn)在讓我們來嘗試輸出整列的數(shù)據(jù)叽赊,當然,此處需要使用到循環(huán)語句必搞。輸出整個列的代碼展示如下

>>> for x in range (1,9):  
        print(x,sheet.cell(row=x,column=4).value)

1 Item  
2 Pencil  
3 Binder  
4 Pencil  
5 Pen  
6 Pencil  
7 Binder  
8 Pencil  
>>>

在輸出了整列數(shù)據(jù)后必指,現(xiàn)在可以嘗試輸出多列的數(shù)據(jù)了。由于我們的文件很小恕洲,所以我們就輸出完整的表格塔橡。詳見下方代碼

for y in range (1,9,1):  
print(sheet.cell(row=y,column=1).value,sheet.cell(row=y,column=2).value,  
sheet.cell(row=y,column=3).value,sheet.cell(row=y,column=4).value,  
sheet.cell(row=y,column=5).value, sheet.cell(row=y,column=6).value,  
sheet.cell(row=y,column=7).value,sheet.cell(row=y,column=8).value)

這些代碼可以輸出工作表中的所有列,那么至此霜第,我們已經(jīng)訪問了excel文件葛家,將其載入內存,訪問工作表以及單元格里的數(shù)據(jù)泌类。下一章節(jié)癞谒,我們將詳細講述如何用python將數(shù)據(jù)寫入excel文件。

敬請期待啦刃榨!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
禁止轉載弹砚,如需轉載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末枢希,一起剝皮案震驚了整個濱河市桌吃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苞轿,老刑警劉巖茅诱,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搬卒,居然都是意外死亡瑟俭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門秀睛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尔当,“玉大人,你說我怎么就攤上這事⊥钟” “怎么了锐帜?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畜号。 經(jīng)常有香客問我缴阎,道長,這世上最難降的妖魔是什么简软? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任蛮拔,我火速辦了婚禮,結果婚禮上痹升,老公的妹妹穿的比我還像新娘建炫。我一直安慰自己,他們只是感情好疼蛾,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布肛跌。 她就那樣靜靜地躺著,像睡著了一般察郁。 火紅的嫁衣襯著肌膚如雪衍慎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天皮钠,我揣著相機與錄音稳捆,去河邊找鬼。 笑死麦轰,一個胖子當著我的面吹牛乔夯,可吹牛的內容都是我干的。 我是一名探鬼主播款侵,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼驯嘱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喳坠?” 一聲冷哼從身側響起鞠评,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壕鹉,沒想到半個月后剃幌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡晾浴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年负乡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脊凰。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抖棘,死狀恐怖茂腥,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情切省,我是刑警寧澤最岗,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站朝捆,受9級特大地震影響般渡,放射性物質發(fā)生泄漏。R本人自食惡果不足惜芙盘,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一驯用、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧儒老,春花似錦蝴乔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巩剖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钠怯,已是汗流浹背佳魔。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晦炊,地道東北人鞠鲜。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像断国,于是被迫代替她去往敵國和親贤姆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容