相信很多坐在辦公室上班的朋友每天都需要處理大量的數(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)站,再加入筆者的一些想法鹃唯。有興趣的朋友可以訪問:
首先讓我們一起看一下爱榕,如何使用Openpyxl讀取Excel文檔中的數(shù)據(jù)。
openpyxl基礎概念
- Excel文件通常被稱為電子表格坡慌,但在openpyxl中被稱為工作簿
- 單個工作簿通常保存在擴展名為.xlsx的文件中
- 一個工作簿可能只有一個工作表黔酥,也可能有幾十個工作表
- 活動工作表是用戶正在查看或關閉文件前查看的工作表
- 每個工作表都由列組成,列的名字從A開始依次類推
- 每個工作表都由行組成洪橘,每個行從1開始編號跪者,依次類推
- 行與列的交界處稱為單元格。每個單元格對于對應的行和列就有了特定的地址熄求。單元格內可以包含數(shù)字渣玲,公式或者文字
- 單元格組成的網(wǎng)格在excel中組成了工作區(qū)域或者說工作表
從Excel工作表中讀取數(shù)據(jù)
首先我們假設建一個Excel文件,命名為testfile.xlsx
抡四。
以上是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文件。
敬請期待啦刃榨!