python中读写excel_python读写Excel
Python讀寫excel
對(duì)于python 處理excel 表格,這個(gè)日常工作的需求還是不少,于是查查資料,自己寫寫,總結(jié)一下,記錄一下,下次遇到直接拿過(guò)來(lái)用,方便自己,方便大家。
好在python有讀寫excel package很方便。
xlrd:用于讀Excel文件
xlwt:寫Excel包,文件后綴名為.xls,最多只能存65536行數(shù)據(jù)(2的16次方)
xlsxwriter:也是寫Excel包,文件后綴名.xlsx,最大支持1048576(2的20次方)行數(shù)據(jù),16384(2的14次方)列數(shù)據(jù)
openpyxl:既能讀也能寫,非常厲害,還能插入刪除一行一列,后綴名是.xlsx
一,xlrd,xlwt 使用
## 1,導(dǎo)入模塊
import xlrd
## 2, 打開(kāi)Excel文件讀取數(shù)據(jù)
data = xlrd.open_workbook('excel.xls')
##3,獲取一個(gè)工作表
table = data.sheets()[0] #通過(guò)索引順序獲取
table = data.sheet_by_index(0) #通過(guò)索引順序獲取
table = data.sheet_by_name(u'Sheet1')#通過(guò)名稱獲取
## 4,獲取整行和整列的值(返回?cái)?shù)組)
table.row_values(i)
table.col_values(i)
## 5,獲取行數(shù)和列數(shù)
table.nrows
table.ncols
## 6,獲取單元格
table.cell(0,0).value
table.cell(2,3).value
就我自己使用的時(shí)候覺(jué)得還是獲取cell最有用,這就相當(dāng)于是給了你一個(gè)二維數(shù)組,余下你就可以想怎么干就怎么干了。得益于這個(gè)十分好用的庫(kù)代碼很是簡(jiǎn)潔。但是還是有若干坑的存在導(dǎo)致話了一定時(shí)間探索。現(xiàn)在列出來(lái):
1、首先就是我的統(tǒng)計(jì)是根據(jù)姓名統(tǒng)計(jì)各個(gè)表中的信息的,但是調(diào)試發(fā)現(xiàn)不同的表中各個(gè)名字貌似不能夠匹配,開(kāi)始懷疑過(guò)編碼問(wèn)題,不過(guò)后來(lái)發(fā)現(xiàn)是因?yàn)榭崭瘛R驗(yàn)樵趀xcel中輸入的時(shí)候很可能會(huì)順手在一些名字后面加上幾個(gè)空格或是tab鍵,這樣看起來(lái)沒(méi)什么差別,但是程序處理的時(shí)候這就是兩個(gè)完全不同的串了。我的解決方法是給每個(gè)獲取的字符串都加上strip()處理一下。效果良好
2、還是字符串的匹配,在判斷某個(gè)單元格中的字符串(中文)是否等于我所給出的的時(shí)候發(fā)現(xiàn)無(wú)法匹配,并且各種unicode也不太奏效,百度過(guò)一些解決方案,但是都比較復(fù)雜或是沒(méi)用。最后我采用了一個(gè)比較變通的方式:直接從excel中獲取我想要的值再進(jìn)行比較,效果是不錯(cuò)就是通用行不太好,不過(guò)問(wèn)題還沒(méi)解決。
#導(dǎo)入xlwt模塊
import xlwt
# 創(chuàng)建一個(gè)Workbook對(duì)象,這就相當(dāng)于創(chuàng)建了一個(gè)Excel文件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
'''
Workbook類初始化時(shí)有encoding和style_compression參數(shù)
encoding:設(shè)置字符編碼,一般要這樣設(shè)置:w = Workbook(encoding='utf-8'),就可以在excel中輸出中文了。
默認(rèn)是ascii。當(dāng)然要記得在文件頭部添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
style_compression:表示是否壓縮,不常用。
'''
#創(chuàng)建一個(gè)sheet對(duì)象,一個(gè)sheet對(duì)象對(duì)應(yīng)Excel文件中的一張表格。
# 在電腦桌面右鍵新建一個(gè)Excel文件,其中就包含sheet1,sheet2,sheet3三張表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是這張表的名字,cell_overwrite_ok,表示是否可以覆蓋單元格,其實(shí)是Worksheet實(shí)例化的一個(gè)參數(shù),默認(rèn)值是False
# 向表test中添加數(shù)據(jù)
sheet.write(0, 0, 'EnglishName') # 其中的'0-行, 0-列'指定表中的單元,'EnglishName'是向該單元寫入的內(nèi)容
sheet.write(1, 0, 'Marcovaldo')
txt1 = '中文名字'
sheet.write(0, 1, txt1.decode('utf-8')) # 此處需要將中文字符串解碼成unicode碼,否則會(huì)報(bào)錯(cuò)
txt2 = '馬可瓦多'
sheet.write(1, 1, txt2.decode('utf-8'))
# 最后,將以上操作保存到指定的Excel文件中
book.save(r'e:\test1.xls') # 在字符串前加r,聲明為raw字符串,這樣就不會(huì)處理其中的轉(zhuǎn)義了。否則,可能會(huì)報(bào)錯(cuò)
建議還是用ascii編碼,不然可能會(huì)有一些詭異的現(xiàn)象。
二,xlsxwriter使用
#coding:utf-8
import xlsxwriter
workbook=xlsxwriter.Workbook('demo1.xlsx')#創(chuàng)建一個(gè)excel文件
worksheet=workbook.add_worksheet(u'sheet1')#在文件中創(chuàng)建一個(gè)名為TEST的sheet,不加名字默認(rèn)為sheet1
worksheet.set_column('A:A',20)#設(shè)置第一列寬度為20像素
bold=workbook.add_format({'bold':True})#設(shè)置一個(gè)加粗的格式對(duì)象
worksheet.write('A1','HELLO')#在A1單元格寫上HELLO
worksheet.write('A2','WORLD',bold)#在A2上寫上WORLD,并且設(shè)置為加粗
worksheet.write('B2',U'中文測(cè)試',bold)#在B2上寫上中文加粗
worksheet.write(2,0,32)#使用行列的方式寫上數(shù)字32,35,5
worksheet.write(3,0,35.5)#使用行列的時(shí)候第一行起始為0,所以2,0代表著第三行的第一列,等價(jià)于A4
worksheet.write(4,0,'=SUM(A3:A4)')#寫上excel公式
workbook.close()
三,用openpyxl向Excel插入一行或一列
功能非常強(qiáng)大,文檔主頁(yè)點(diǎn)這里
插入列用insert_cols
插入行用insert_rows
讀并加一列示例:
import openpyxl
wb = openpyxl.load_workbook('0.xlsx')
ws = wb.worksheets[0]
# 在第3列之前插入數(shù)據(jù),這里序號(hào)是從1開(kāi)始的
ws.insert_cols(3)
# 插入數(shù)據(jù)
for index, row in enumerate(ws.rows):#按行讀取
if index == 0:
row[2].value = '新字段'
else:
row[2].value = index
wb.save('0_new.xlsx')
寫示例:
import openpyxl
wb = openpyxl.Workbook()#創(chuàng)建一個(gè)表
sheet = wb.active#找到活動(dòng)sheet頁(yè),
sheet.title = 'New Sheet'
sheet['C3'] = 'hello world'#這里讀取是一樣的,按cell讀
for i in range(10):
sheet["A%d" % (i+1)].value = i + 1
sheet["E1"].value = "=SUM(A:A)"#還可以寫公式
wb.save('新的excel.xlsx')
總結(jié)
以上是生活随笔為你收集整理的python中读写excel_python读写Excel的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 详解LCD1602液晶显示屏的使用
- 下一篇: python中_python中的一些用法