Excel操作
一、读取excel中的内容
students.xml里的内容如下:
import xlrd book = xlrd.open_workbook('students.xls') #打开操作的文件 sheet = book.sheet_by_index(0) #选择文件内的sheet页 # sheet = book.sheet_by_name('sheet1') #获取sheert,同sheet_by_index,从0开始 print(sheet.cell(0,0).value) #指定单元格的内容 print(sheet.row_values(1))#取整行的数据 print(sheet.col_values(0))#取整列的数据 print(sheet.nrows) #总共多少行 print(sheet.ncols) #总多少列 运行结果: id ['1', '小花'] ['id', '1', '2', '3'] 4 2
二、修改excel内容
from xlutils import copy #引用copy时,最好有这种方式 import xlrd import os book = xlrd.open_workbook('students.xls') new_book = copy.copy(book) #修改文件时,最好不要再源文件上直接改 sheet = new_book.get_sheet(0) #选择sheet页 sheet.write(0,3,"score") #写入内容,行,列,内容 sheet.write(0,4,"sex")#写入内容,行,列,内容 os.rename('students.xls','students_bak1.xls') #先备份修改的文件内容,存在students_bak1.xls文件里 new_book.save('students.xls')#将修改的内容,保存再students.xls里
会在同目录下生成一个文件students_bak1.xls
students_bak1.xls里为修改前文件students.xls里的内容,students.xls里是修改后的内容
三、enumerate() 函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
语法
以下是 enumerate() 方法的语法:
enumerate(sequence, [start=0])
参数
- sequence -- 一个序列、迭代器或其他支持迭代对象。
- start -- 下标起始位置。
返回值
返回 enumerate(枚举) 对象。
例子一:
number = ['a','b','c','d'] for index,i in enumerate(number,1): print(index,i) 运行结果: 1 a 2 b 3 c 4 d
例子二:
data = [ ["1","小花",99,100,98.5],#1 ["2","小王",90,30.5,95],# ["3","小明",67.5,49.6,88]# ] for row,v in enumerate(data,1): #行序列从1开始,注意用法:入参为循环的对象+从几开始 print(row,v) 运行结果: 1 ['1', '小花', 99, 100, 98.5] 2 ['2', '小王', 90, 30.5, 95] 3 ['3', '小明', 67.5, 49.6, 88]
三、Excel有关的练习
方法一:
import xlwt book = xlwt.Workbook() sheet = book.add_sheet('sheet1') title = ['编号','姓名','语文成绩','数学成绩','英语成绩','总分','平均分'] #处理表头 row = 0 for t in title: sheet.write(0,row,t) row+=1 data = [ ["1","小花",99,100,98.5],#1 ["2","小王",90,30.5,95],# ["3","小明",67.5,49.6,88]# ] row = 1 for v in data: #行v获取的["1","小花",99,100,98.5] col = 0 sum_score = sum(v[2:])#算总分 avg_score = round(sum_score / 3,2) #算平均分,保留2位小数 v.append(sum_score) #把总分加到每个list里["1","小花",99,100,98.5] v.append(avg_score)#把平均分加到每个list里["1","小花",99,100,98.5] for value in v: sheet.write(row,col,value) col+=1 row+=1 book.save("students.xls") #xls/xlsx 再wps都可以 但是excel得xls才可以
方法二:enumerate自动加序列
import xlwt book = xlwt.Workbook() sheet = book.add_sheet('sheet1') title = ['编号','姓名','语文成绩','数学成绩','英语成绩','总分','平均分'] #处理表头 row = 0 for t in title: sheet.write(0,row,t) row+=1 data = [ ["1","小花",99,100,98.5],#1 ["2","小王",90,30.5,95],# ["3","小明",67.5,49.6,88]# ] for row,v in enumerate(data,1): #行序列从1开始 sum_score = sum(v[2:])#算总分 avg_score = round(sum_score / 3,2) #算平均分 v.append(sum_score) v.append(avg_score) for col,value in enumerate(v): sheet.write(row,col,value) book.save("students.xls") #xls/xlsx 再wps都可以 但是excel得xls才可以