python讀寫excel文件

一、背景

python自動(dòng)化測試中鸵熟,有時(shí)候也需要使用到Excel文件副编,而此時(shí)要借用第三方庫才能進(jìn)行操作。在執(zhí)行讀execl文件時(shí)要用到xlrd庫流强,要寫入數(shù)據(jù)至excel文件時(shí)痹届,要用到xlwt庫,它們需要單獨(dú)安裝打月,安裝方式也非常簡單队腐。當(dāng)然也可以用其他的第三方庫,比如openpyxl和xlutils庫奏篙。最后柴淘,選擇什么模塊要根據(jù)實(shí)際情況而定。

二秘通、各模塊之間的區(qū)別

xlrd为严,xlwt和xlutils是用Python處理Excel文檔(*.xls)的高效率工具。其中肺稀,xlrd只能讀取xls第股,xlwt只能新建xls(不可以修改),xlutils能將xlrd.Book轉(zhuǎn)為xlwt.Workbook话原,從而得以在現(xiàn)有xls的基礎(chǔ)上修改數(shù)據(jù)夕吻,并創(chuàng)建一個(gè)新的xls,實(shí)現(xiàn)修改繁仁。openpyxl(可讀寫excel表)專門處理Excel2007及以上版本產(chǎn)生的xlsx文件涉馅,xls和xlsx之間轉(zhuǎn)換容易。另外黄虱,還有以下特點(diǎn)控漠。

  • 讀取文件速度,xlrd比openpyxl較快
  • xlwt寫入文件效率較高
  • xlwt寫入數(shù)據(jù)會(huì)有局限性,不能寫入超過65535行盐捷、256列的數(shù)據(jù)(因?yàn)樗恢С諩xcel 2003及之前的版本偶翅,在這些版本的Excel中行數(shù)和列數(shù)有此限制)
  • xlrd,xlwt和xlutils是用Python處理Excel文檔(*.xls)的高效率工具碉渡。其中聚谁,xlrd只能讀取xls,xlwt只能新建xls(不可以修改)滞诺,xlutils能將xlrd.Book轉(zhuǎn)為xlwt.Workbook形导,從而得以在現(xiàn)有xls的基礎(chǔ)上修改數(shù)據(jù)
  • xlwt不支持07版以后的excel并創(chuàng)建一個(gè)新的xlsx(可以創(chuàng)建xls格式的excel文件),openpyxl支持07+的excel习霹,一直有人在維護(hù)朵耕,文檔清晰易讀。

三淋叶、安裝第三方庫

這里選擇xlrd阎曹,xlwt模塊進(jìn)行簡單介紹。

安裝xlrd庫:

pip install xlrd

安裝xlwt庫:

pip install xlwt

也可以直接在pycharm編輯器中安裝煞檩,方法也非常的簡單:先打開settings处嫌,然后找到project interpreter,最后再添加想要安裝的模塊即可斟湃。

四熏迹、讀取excel文件數(shù)據(jù)

這里準(zhǔn)備了一個(gè)招聘人員信息表,名字叫zhaopin.xlsx的工作簿凝赛,其中有兩個(gè)表注暗,名字叫招聘人員和數(shù)據(jù)分析。如圖:

下面我們用python第三方庫xlrd來讀取工作簿中的信息墓猎。

1友存、 sheet_names:獲取所有的sheet的名字。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet_names = workbook.sheet_names() # 獲得工作簿中的所有表明
print(sheet_names)

結(jié)果:

['招聘人員', '數(shù)據(jù)分析']

2陶衅、 sheet_by_index:根據(jù)索引獲取sheet對象。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet0 = workbook.sheet_by_index(0) # 獲取索引為0的表對象直晨,0對應(yīng)的是excel工作簿中的第一張表
sheet1 = workbook.sheet_by_index(1) # 獲取索引為1的表對象搀军,1對應(yīng)的是excel工作簿中的第二張表
print(sheet0.name)
print(sheet1.name)

結(jié)果:

招聘人員
數(shù)據(jù)分析

3、 sheet_by_name:根據(jù)名字獲取sheet對象勇皇。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_name('數(shù)據(jù)分析')
print(sheet.name)

結(jié)果:

數(shù)據(jù)分析

注意:sheet_by_name('數(shù)據(jù)分析')括號中的表名稱一定要填寫正確罩句,否則無法找到對象,會(huì)報(bào)錯(cuò)敛摘。

4门烂、sheets:獲取所有的sheet對象。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheets = workbook.sheets() # 獲取所有的`sheet`對象
for sheet in sheets:
    print(sheet.name)

結(jié)果:

招聘人員
數(shù)據(jù)分析

5、sheet.nrows:這個(gè)sheet中的行數(shù)屯远。

6蔓姚、sheet.ncols:這個(gè)sheet中的列數(shù)。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_index(0) # 獲取索引為0的表對象慨丐,0對應(yīng)的是excel工作簿中的第一張表
sheet_nrows = sheet.nrows # 這個(gè)`sheet`中的行數(shù)
sheet_ncols = sheet.ncols # 這個(gè)`sheet`中的列數(shù)
print('行數(shù)為:{}'.format(sheet_nrows))
print('列數(shù)為:{}'.format(sheet_ncols))

結(jié)果:

行數(shù)為:78
列數(shù)為:7

7坡脐、sheet.cell(row,col):獲取指定行和列的cell對象。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_name('招聘人員')
cells = sheet.cell(0,1) # 獲取指定0行和1列的cell對象房揭。
print(cells.value) # 打印這個(gè)cell里面的值备闲。

結(jié)果:

姓名

8、sheet.row_slice(row,start_col,end_col):獲取指定行的某幾列的cell對象捅暴。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_name('招聘人員')
cells = sheet.row_slice(0,0,6) # 獲取指定0行的0列到5列的cell對象恬砂。
print(cells)

結(jié)果:

[text:'序號', text:'姓名', text:'性別', text:'專業(yè)', text:'學(xué)歷', text:'畢業(yè)院校']

9、sheet.col_slice(col,start_row,end_row):獲取指定列的某幾行的cell對象蓬痒。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_index(0) # 獲取索引為0的表對象呐舔,0對應(yīng)的是excel工作簿中的第一張表
cells = sheet.col_slice(1,0,5)#獲取1列0行到4行的cell對象,返回一個(gè)列表
for cell in cells:
    print(cell.value) # 打印這個(gè)cell里面的值鸣皂。

結(jié)果:

姓名
馮濤
李佳楠
羅旭
張自航

10瞻坝、sheet.cell_value(row,col):獲取指定行和列的值。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_index(0)
cells = sheet.cell_value(0,5)
print(cells)

結(jié)果:

畢業(yè)院校

11粹断、sheet.row_values(row,start_col,end_col):獲取指定行的某幾列的值符欠。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_index(0)
cells = sheet.row_values(0,0,6) # 獲取0行從0列到5列的值。
print(cells)

結(jié)果:

['序號', '姓名', '性別', '專業(yè)', '學(xué)歷', '畢業(yè)院校']

注意:它與sheet.row_slice(row,start_col,end_col)的區(qū)別瓶埋,一個(gè)是獲取對象希柿,一個(gè)是獲取值。

12养筒、sheet.col_values(col,start_row,end_row):獲取指定列的某幾行的值曾撤。

import xlrd

workbook = xlrd.open_workbook('zhaopin.xlsx') # 打開名字叫'zhaopin.xlsx'的工作簿
sheet = workbook.sheet_by_index(0)
cells = sheet.col_values(1,0,5)
print(cells)

結(jié)果:

['姓名', '馮濤', '李佳楠', '羅旭', '張自航']

注意:它與sheet.col_slice(col,start_row,end_row)的區(qū)別,一個(gè)是獲取對象晕粪,一個(gè)是獲取值挤悉。

五、寫入數(shù)據(jù)至excel文件

1巫湘、cell的數(shù)據(jù)類型

  • xlrd.XL_CELL_TEXT(Text):文本類型装悲。
  • xlrd.XL_CELL_NUMBER(Number):數(shù)值類型。
  • xlrd.XL_CELL_DATE(Date):日期時(shí)間類型尚氛。
  • xlrd.XL_CELL_BOOLEAN(Bool):布爾類型诀诊。
  • xlrd.XL_CELL_BLANK:空白數(shù)據(jù)類型。

2阅嘶、寫入數(shù)據(jù)至excel文件步驟

  • 首先属瓣,導(dǎo)入xlwt模塊载迄。
  • 然后,創(chuàng)建一個(gè)Workbook對象抡蛙。
  • 然后护昧,創(chuàng)建一個(gè)Sheet對象。
  • 接著溜畅,使用sheet.write(row,col,data)方法把數(shù)據(jù)寫入到Sheet下指定行和列中捏卓。如果想要在原來workbook對象上添加新的cell,那么需要調(diào)用put_cell來添加慈格。
  • 最后怠晴,保存成Excel文件。

3浴捆、實(shí)例

比如蒜田,我想在原來的‘zhaopin.xlsx’表中添加"總分"一列,并在其中隨機(jī)填充面試得分选泻。需要注意冲粤,如果想要在原來已經(jīng)存在的Excel文件中添加新的行或者新的列,那么需要采put_cell(row,col,type,value,xf_index)來添加進(jìn)去页眯,最后再放到xlwt創(chuàng)建的workbook中梯捕,然后再保存進(jìn)去。示例代碼如下:

import xlwt
import xlrd
import random

workbook = xlrd.open_workbook('zhaopin.xlsx')  # 打開名字叫'zhaopin.xlsx'的工作簿
rsheet = workbook.sheet_by_index(0)
rsheet.put_cell(0, 6, xlrd.XL_CELL_TEXT, '總分', None)  # 在0行6列處添加“總分”列窝撵,列屬性為文本

for row in range(1, rsheet.nrows):
    rsheet.put_cell(
        row,
        6,
        xlrd.XL_CELL_TEXT,
        random.randint(
            70,
            99),
        None)  # 隨機(jī)向每行6列添加70~99之間的數(shù)

write_workbook = xlwt.Workbook(encoding='utf8')  # 重新創(chuàng)建一個(gè)工作簿
wsheet = write_workbook.add_sheet('招聘人員')  # 工作簿中創(chuàng)建一個(gè)名字為“招聘人員”的表
for row in range(rsheet.nrows):
    for col in range(rsheet.ncols):
        wsheet.write(row, col, rsheet.cell_value(row, col))  # 將原表中的數(shù)據(jù)寫入新創(chuàng)建的表中

write_workbook.save('zhaopin_new.xls')  # 保存

結(jié)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傀顾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碌奉,更是在濱河造成了極大的恐慌短曾,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赐劣,死亡現(xiàn)場離奇詭異嫉拐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)魁兼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門婉徘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咐汞,你說我怎么就攤上這事盖呼。” “怎么了碉考?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挺身。 經(jīng)常有香客問我侯谁,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任墙贱,我火速辦了婚禮热芹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惨撇。我一直安慰自己伊脓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布魁衙。 她就那樣靜靜地躺著报腔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剖淀。 梳的紋絲不亂的頭發(fā)上纯蛾,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音纵隔,去河邊找鬼翻诉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捌刮,可吹牛的內(nèi)容都是我干的碰煌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼绅作,長吁一口氣:“原來是場噩夢啊……” “哼芦圾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棚蓄,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤堕扶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后梭依,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稍算,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年役拴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糊探。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡河闰,死狀恐怖科平,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姜性,我是刑警寧澤瞪慧,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站部念,受9級特大地震影響弃酌,放射性物質(zhì)發(fā)生泄漏氨菇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一妓湘、第九天 我趴在偏房一處隱蔽的房頂上張望查蓉。 院中可真熱鬧,春花似錦榜贴、人聲如沸豌研。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹃共。三九已至,卻和暖如春初嘹,著一層夾襖步出監(jiān)牢的瞬間及汉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工屯烦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坷随,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓驻龟,卻偏偏與公主長得像温眉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子翁狐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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