Python利用xlrd与xlwt模块实现Excel成绩排序
本文介绍如何使用Python的xlrd和xlwt模块读取Excel文件,并通过冒泡排序算法将学生成绩按从高到低重新排序。代码示例展示了如何同时处理学号、姓名和分数,确保数据关联一致,最后将排序结果写入新的Excel文件。
一、需求分析
首先面对一个按学号排序的成绩表单,目标是明确每位学生的名次,并将学生记录依据成绩高低重新排列。
核心任务是将原有的按学号排序转换为按成绩降序排列。
二、代码呈现
该需求实现较为直接,主要涉及Excel文件的读写操作,完成读写后即可处理排序逻辑。
读取Excel使用xlrd模块,写入Excel使用xlwt模块。
具体代码及解释如下:
import xlwt
import xlrd
# 导入模块
wb = xlwt.Workbook()
# 创建 excel 表格
xls_0 = xlrd.open_workbook("四年级1.xls")
# 读取表格文件
for i in range(4, 8, 1):
# 读取不同的表单
new_sheet = xls_0.sheet_by_index(i)
sh = wb.add_sheet(f'{new_sheet.name}.xls') # 创建一个 表单
# 设置空列表进行数据的存储
id_list = []
name_list = []
score_list = []
# 读取表格的数据
for o in range(3): # 3 列
for t in range(20): # 20 行
# 获取学号、姓名、成绩等信息
id_list.append(new_sheet.cell(t + 3, 3 * o).value)
name_list.append(new_sheet.cell(t + 3, 3 * o + 1).value)
score_list.append(new_sheet.cell(t + 3, 3 * o + 2).value)
# 获取数据
# 进行一定的预处理,去除不存在的人
# 意思是说:有些位置是空的,这些位置需要去除掉
for number in range(len(id_list)):
# 由于进行的是删除操作,所以可能会出现下标越界的情况,为了防止这种情况的出现,我们进行异常处理
try:
if name_list[number] == '' or score_list[number] == '' or score_list[number] == '请假':
# 这个实际上是去除空值
id_list.pop(number)
name_list.pop(number)
score_list.pop(number)
except:
continue
# 去除不存在的人
# 进行排序的操作
for h in range(len(id_list)):
# len(id_list) 次循环
for s in range(len(id_list) - 1):
# 这里是进行 len(id_list) - 1 次循环
try:
if score_list[s] >= score_list[s + 1]:
pass
else:
score_list[s], score_list[s + 1] = score_list[s + 1], score_list[s]
name_list[s], name_list[s + 1] = name_list[s + 1], name_list[s]
id_list[s], id_list[s + 1] = id_list[s + 1], id_list[s]
except:
continue
# 冒泡排序
# 将数据写入文件
position = 0
for h in range(len(id_list)):
# 写入文件
sh.write(position, 0, id_list[h])
sh.write(position, 1, name_list[h])
sh.write(position, 2, score_list[h])
position += 1
# 写入文件中去
# 保存文件
wb.save(f'四年级1-五至八班-分数排序.xls')
# 保存
此处采用冒泡排序算法。若追求更高运行效率,可选用希尔排序、堆排序或快速排序等。需注意,学号、姓名和分数必须作为整体同步移动,排序依据为分数数值。
三、成果展示
图片1、

图片2、
图片3、

图片4、

关于Python处理表格进行成绩排序的操作代码介绍至此,更多Python成绩排序相关内容可搜索本站往期文章或浏览下方相关文章,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









