python如何處理表格?
python處理表格的方法:
python操作excel主要用到xlrd和xlwt這兩個函式庫,即xlrd是讀excel,xlwt是寫excel的函式庫。可從這裡下載https://pypi.python.org/pypi。下面分別記錄python讀和寫excel。
Python寫excel——xlwt
Python寫excel的難點不在建構一個workbook的本身,而是填充的數據,不過這不在範圍內。在寫excel的操作上也有棘手的問題,例如寫入合併的儲存格就是比較麻煩的,另外寫入還有不同的樣式。
詳細程式碼如下:
import xlwt #设置表格样式 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('学生',cell_overwrite_ok=True) row0 = ["姓名","年龄","出生日期","爱好"] colum0 = ["张三","李四","恋习Python","小明","小红","无名"] 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()
結果圖:
#在此,對write_merge()的用法稍作解釋,如上述:sheet1.write_merge(1,2,3,3,'打遊戲'),即在四列合併第2,3列,合併後的單元格內容為"合計",並設定了style。其中,裡面所有的參數都是以0開始計算的。
Python讀excel-xlrd
Python讀取Excel表格,比起xlwt來說,xlrd提供的介面比較多,但過程也有幾個比較麻煩的問題,例如讀取日期、讀取合併儲存格內容。
下面先看看基本的操作:
整體思路為,開啟文件,選定表格,讀取行列內容,讀取表格內數據
詳細程式碼如下:
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)#获取行内容 cols = sheet1.col_values(3)#获取列内容 print(rows) print(cols) print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式 print(sheet1.cell_value(1,0)) print(sheet1.row(1)[0].value)
運行結果如下:
#那麼問題來了,上面的運行結果中紅框框中的欄位明明是出生日期,可顯示的確實浮點數;同時合併儲存格裡面應該是有內容的,結果不能為空。
別急,我們來一一解決這兩個問題:
1.python讀取excel中單元格內容為日期的方式
python讀取excel中單元格的內容回傳的有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才能開始操作。
詳細程式碼如下:
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.取得合併儲存格的內容
在操作之前,先介紹一下merged_cells()用法,merged_cells回傳的這四個參數的意思是:(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列合併。
詳細程式碼如下:
print(sheet1.merged_cells)print(sheet1.cell_value(1,3)) print(sheet1.cell_value(4,3)) print(sheet1.cell_value(6,1))
發現規律了沒?是的,取得merge_cells傳回的row和col低位的索引即可!於是可以這樣批次取得:
詳細程式碼如下:
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]))
運行結果跟上圖一樣,如下:
推薦教學: 《python》
以上是python如何處理表格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!