久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python讀寫Excel表格,就是這么簡單粗暴又好用

 L羅樂 2018-06-30


圖片源自unsplash

作者

丁彥軍

如需轉(zhuǎn)載,,請聯(lián)系原作者授權(quán),。


最近在做一些數(shù)據(jù)處理和計算的工作,因為數(shù)據(jù)是以.csv格式保存的,,因此剛開始直接用Excel來處理。但是做著做著發(fā)現(xiàn)重復(fù)的勞動其實并沒有多大的意義,,于是就想著寫個小工具幫著處理,。以前正好在一本書上看到過使用Python來處理Excel表格,可惜沒有仔細(xì)看,。于是我到處查找資料,基本解決了日常所需,,終于算是完成了任務(wù),,因此撰寫此文就算是總結(jié)吧,,主要記錄使用過程的常見問題及解決。


python操作excel主要用到xlrd和xlwt這兩個庫,,即xlrd是讀excel,xlwt是寫excel的庫,??蓮倪@里下載https://pypi./pypi,。下面分別記錄python讀和寫excel。


Python寫excel——xlwt

Python寫excel的難點不在構(gòu)造一個workbook的本身,,而是填充的數(shù)據(jù),不過這不在范圍內(nèi),。在寫excel的操作中也有棘手的問題,比如寫入合并的單元格就是比較麻煩的,,另外寫入還有不同的樣式,。

詳細(xì)代碼如下:

import xlwt


#設(shè)置表格樣式

def set_style(name,height,bold=False):

style = xlwt.XFStyle()

font = xlwt.Font()

font.name = name

font.bold = bold

font.color_index = 4

font.height = height

style.font = font

return style


#寫Excel

def write_excel():

f = xlwt.Workbook()

sheet1 = f.add_sheet('學(xué)生',cell_overwrite_ok=True)

row0 = ['姓名','年齡','出生日期','愛好']

colum0 = ['張三','李四','戀習(xí)Python','小明','小紅','無名']

#寫第一行

for i in range(0,len(row0)):

sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))

#寫第一列

for i in range(0,len(colum0)):

sheet1.write(i 1,0,colum0[i],set_style('Times New Roman',220,True))


sheet1.write(1,3,'2006/12/12')

sheet1.write_merge(6,6,1,3,'未知')#合并行單元格

sheet1.write_merge(1,2,3,3,'打游戲')#合并列單元格

sheet1.write_merge(4,5,3,3,'打籃球')


f.save('test.xls')


if __name__ == '__main__':

write_excel()


結(jié)果圖:


在此,,對write_merge()的用法稍作解釋,如上述:sheet1.write_merge(1,2,3,3,'打游戲'),,即在四列合并第2,3列,合并后的單元格內(nèi)容為'合計',,并設(shè)置了style。其中,,里面所有的參數(shù)都是以0開始計算的,。


Python讀excel——xlrd

Python讀取Excel表格,,相比xlwt來說,xlrd提供的接口比較多,,但過程也有幾個比較麻煩的問題,,比如讀取日期,、讀合并單元格內(nèi)容。

下面先看看基本的操作:


圖表數(shù)據(jù)

整體思路為,,打開文件,選定表格,,讀取行列內(nèi)容,,讀取表格內(nèi)數(shù)據(jù)

詳細(xì)代碼如下:

import xlrd

from datetime import date,datetime


file = 'test3.xlsx'


def read_excel():


wb = xlrd.open_workbook(filename=file)#打開文件

print(wb.sheet_names())#獲取所有表格名字


sheet1 = wb.sheet_by_index(0)#通過索引獲取表格

sheet2 = wb.sheet_by_name('年級')#通過名字獲取表格

print(sheet1,sheet2)

print(sheet1.name,sheet1.nrows,sheet1.ncols)


rows = sheet1.row_values(2)#獲取行內(nèi)容

cols = sheet1.col_values(3)#獲取列內(nèi)容

print(rows)

print(cols)


print(sheet1.cell(1,0).value)#獲取表格里的內(nèi)容,三種方式

print(sheet1.cell_value(1,0))

print(sheet1.row(1)[0].value)


運行結(jié)果如下:


那么問題來了,,上面的運行結(jié)果中紅框框中的字段明明是出生日期,可顯示的確實浮點數(shù),;同時合并單元格里面應(yīng)該是有內(nèi)容的,結(jié)果不能為空,。


別急,,我們來一一解決這兩個問題:


1.python讀取excel中單元格內(nèi)容為日期的方式


python讀取excel中單元格的內(nèi)容返回的有5種類型,即上面例子中的ctype:

ctype :  0 empty,,1 string,,2 number,, 3 date,4 boolean,,5 error

即date的ctype=3,這時需要使用xlrd的xldate_as_tuple來處理為date格式,,先判斷表格的ctype=3時xldate才能開始操作,。



詳細(xì)代碼如下:

import xlrd

from datetime import date,datetime


print(sheet1.cell(1,2).ctype)

date_value = xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode)

print(date_value)

print(date(*date_value[:3]))

print(date(*date_value[:3]).strftime('%Y/%m/%d'))



2.獲取合并單元格的內(nèi)容


在操作之前,,先介紹一下merged_cells()用法,,merged_cells返回的這四個參數(shù)的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一樣,即(1, 3, 4, 5)的含義是:第1到2行(不包括3)合并,,(7, 8, 2, 5)的含義是:第2到4列合并,。


詳細(xì)代碼如下:

print(sheet1.merged_cells)
print(sheet1.cell_value(1,3))

print(sheet1.cell_value(4,3))

print(sheet1.cell_value(6,1))



發(fā)現(xiàn)規(guī)律了沒,?是的,獲取merge_cells返回的row和col低位的索引即可,! 于是可以這樣批量獲取:


詳細(xì)代碼如下:

merge = []

print(sheet1.merged_cells)

for (rlow,rhigh,clow,chigh) in sheet1.merged_cells:

merge.append([rlow,clow])

for index in merge:

print(sheet1.cell_value(index[0],index[1]))


運行結(jié)果跟上圖一樣,,如下:

Python讀寫Excel表格,,就是這么簡單粗暴又好用,,如果覺得不錯,對你工作中有幫助,,動動手指分享給更多人哦,。


- The End -

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多