由于不会使用Excel相关编辑功能,经常需要处理一年级计算机科学导论学生的成绩。记录学习用Pyhton处理Excel的学习过程。
主要用到xlrd和xlwt以及xlutils模块,这几个模块需要下载安装使用,并非pyhton自带模块。可以使用pip安装,也可以直接使用conda。
使用xlrd模块(介绍几个常用的函数功能)
- (1)file=r"C:\Users\Mem_NanWan\Desktop\jiang\1722266.xlsx"#其中加r的目的是告诉编译器这个string是个raw string,不要转义。如果不加r,则需要在\前加转义字符,即双斜杠\\
- (2)book=xlrd.open_workbook()#打开excel表book实例化对象
- (3)sheetList=book.sheets()#因为一个excel有多个sheet,从而返回一个sheet相关列表。可以通过下表返回每待处理的sheet即disposeSheet=sheetList[i]
- (4)disposeSheet=book.sheet_by_index(index)#通过索引返回sheet
- (5)disposeSheet=book.sheet_by_name(name)#通过sheet名字返回特定的sheet
- (6)disposeSheet.name()#返回指定sheet的名字
- (7)disposeSheet.nrows#返回指定sheet的行数
- (8)disposeSheet.ncols#返回指定sheet的列数
- (9)disposeSheet.row(r)#获取指定行,返回Cell对象的list r代表行数
- (10)disposeSheet.row_values(r)#获取指定行的值,返回list(9)(10)区别在于(9)返回的包括数据类型,而(10)单单只是值.具体见下面代码实现。(11)(12)相同
- (11)disposeSheet.col(c)#获取指定列,返回Cell对象的list c代表列数
- (12)disposeSheet.col_values(c)#获取指定列的值,返回list
- (13)disposeSheet.cell(r, c)#获取指定单元格的对象
- (14)disposeSheet.cell_value(r, c)#获取指定单元格的值
def readExcel():
# 前三步打开指定sheet
file = r"C:\Users\Mem_NanWan\Desktop\0610\1722268final.xlsx"
book = xlrd.open_workbook(file)
disposeSheet = book.sheet_by_index(0)
# 获取第五行的对象和值
rowObJ=disposeSheet.row(6)
rowValue=disposeSheet.row_values(6)
print("rowObj",rowObJ)
print("rowValue",rowValue)
#获取某个单元格的对象和值
cellObj=disposeSheet.cell(6, 3)
cellValue=disposeSheet.cell_value(6, 3)
print("cellobj (5,3)",cellObj)
print("cell_value (5,3)",cellValue)
以下为控制台输出:
rowObj [number:6.0, number:888866666.0, text:'南湾', number:1703201000.0, text:'20.0', text:'28.0', text:'13.33', text:'36.0', text:'24.0', text:'12.0', text:'28.0', empty:'', text:'1400910125', text:'100.0', empty:'', empty:'', empty:'', empty:'', number:48.0, empty:'', empty:'', empty:'']
rowValue [6.0, 888866666.0, '南湾', 1703201000.0, '20.0', '28.0', '13.33', '36.0', '24.0', '12.0', '28.0', '', '1400910125', '100.0', '', '', '', '', 48.0, '', '', '']
cellobj (5,3) number:1703201000.0
cell_value (5,3) 1703201000.0
可以明显看到对象和值的区别.
xlwt模块,值的注意的是这个只能创建新的sheet进行写数据,不能向已有数据表写数据,切记。这个模块没有open_Workbook()功能
- book= xlwt.Workbook(encoding='utf-8')#默认编码格式为ascii码,utf_8支持中文.
- book.add_sheet(filename)#添加了一个名为name的sheet表
- disposeSheet=book.sheet_by_index(index,cell_overwrite_ok=True)#得到sheet对象.表的单元格默认是不可重复写,设置为True,可以重复写
- disposeSheet.write(r, c, vlaue)#向cell(r,c)写入值
- book.save(filename)#切记要保存
def writeExcel():
book = xlwt.Workbook(encoding='utf-8')
disposeSheet = book.add_sheet('mem_nanWan', cell_overwrite_ok=True)
for i in range(5):
for j in range(5):
tempVal=random.randint(0,10)
disposeSheet.write(i, j, tempVal)
#保存文件
book.save(r"C:\Users\Mem_NanWan\Desktop\0610\randtest.xls")
book=xlrd.open_workbook(r"C:\Users\Mem_NanWan\Desktop\0610\randtest.xls")
disposeSheet=book.sheets()[0]
rowLen=disposeSheet.nrows
for i in range(rowLen):
rowValue=disposeSheet.row_values(i)
print(i,'row value',rowValue)
#控制台输出
0 row value [8.0, 0.0, 6.0, 6.0, 1.0]
1 row value [7.0, 1.0, 7.0, 10.0, 0.0]
2 row value [0.0, 10.0, 5.0, 0.0, 0.0]
3 row value [9.0, 3.0, 4.0, 9.0, 7.0]
4 row value [1.0, 6.0, 10.0, 7.0, 8.0]
关于xlutils模块和csv处理以后用到再补充
参考文献
使用Python处理Excel文件
Python—对Excel进行读写操作