题目
自己构造包含10个学生的语文、数学和英语成绩的excel文件,用Python程序读取该文件的数据,进行简单的统计分析,包括每门课的最高分、最低分、平均成绩、每个学生的最高分、最低分、平均成绩,然后将统计信息写入excel文件中。用Python程序实现,并给出适当的注释。
题解分析
整个题目可以分为如下几部分
一、获取并修改Excel文件中的单元格值
(1)、每个学生的成绩——>最高分、最低分、平均分
1、先列再行遍历Excle文件内容,获取每个学生的最高分、最低分、(总分/3)=平均分
2、将获得的最高分、最低分、平均分加入到Excel文件中
(2)、每科的分数——>最高分、最低分、平均分
1、先行再列遍历Excle文件内容,获取每个学科的最高分、最低分、(总分/3)=平均分
2、将获得的最高分、最低分、平均分加入到Excel文件中
二、保存修改的Excel文件
代码实现
# 创建读取文件中的数据对象
wb = xlrd.open_workbook('score.xlsx')
#先用xlrd打开文件
oldx= xlrd.open_workbook('score.xlsx', formatting_info=True)
#使其转化成xlwt对象
txb = copy(oldx)
#获取已有表单
tx= txb.get_sheet(0)
#修改单元格值
tx.write(0,4,'最高分')
tx.write(0,5,'最低分')
tx.write(0,6,'平均分')
sh = wb.sheet_by_name(u'Sheet1')
# 输出整个表的数据
for rownum in range(1, sh.nrows):
print(sh.row_values(rownum))
#填写每个学生的最高分、最低分、平均分
for i in range(1, sh.nrows):
Sum = 0
maxs = sh.cell_value(i,1)
mins = sh.cell_value(i,1)
for j in range(1, sh.ncols):
# 获取每个学生的最高分成绩
maxs = max(maxs,sh.cell_value(i,j))
# 获取每个学生的最低分成绩
mins = min(mins,sh.cell_value(i,j))
# 获取每个学生的平均成绩
Sum += sh.cell_value(i, j)
# 将每个学生的最高分填入表中
tx.write(i, j + 1, maxs)
#将每个学生的最低分填入表中
tx.write(i,j + 2 , mins)
# 将每个学生的平均分填入表中
tx.write(i, j+3 , Sum/j-2)
#获取并填写每门课最高分、最低分、平均分
tx.write(i+1,0,"最高分")
tx.write(i+2,0,"最低分")
tx.write(i+3,0,"平均分")
for j in range(1, sh.ncols):
Sump =0
maxs =sh.cell_value(1,j)
mins =sh.cell_value(1,j)
for i in range(1,sh.nrows):
#获取最高分
maxs = max(maxs,sh.cell_value(i,j))
#获取最低分
mins = min(mins,sh.cell_value(i,j))
#获取每个学科的总分
Sump += sh.cell_value(i,j)
tx.write(i+1,j,maxs)
tx.write(i+2,j,mins)
tx.write(i+3,j,Sump/i)
#将数据保存到临时文件scro.xlsxtext.xls文件中去
txb.save('score.xlsx'+ "test.xls")
此实现中有一个难点:在原有的xlsx文档追加内容,会修改原本文件中的内容,所以采用xlutils来在xlrd.Book和xlwt.Workbook之间建立了一个管道,从而实现对“yuan”文件的修改.
实现效果
个人理解不足,如有不足之处望大佬提出修改方案 !!!