python训练成绩分析系统(Python实现学生成绩分析自动化)
python训练成绩分析系统(Python实现学生成绩分析自动化)代码如下:
之前只是因为要参加比赛发布的作品,居然有朋友在求代码,今天改良了一下,加入了tkinter的窗口控制,更加方便的获取文件路径,顺便打包成了exe文件,让组内其他老师不用安装Python也可以使用。
不需要安装其他文件,打开即可在window电脑使用
按提示顺序打开文件
运行完毕也会有提示
代码如下:
import tkinter as tk
from tkinter import filedialog
import pandas as pd
import xlwings as xw
import openpyxl as vb
import os
from tkinter import messagebox
root = tk.Tk()
root.withdraw()
app = xw.App(visible=False add_book=False)
#获取文件路径
messagebox.showinfo("提示" "请打开:适学网数据文件")
path_in = filedialog.askopenfilename()
messagebox.showinfo("提示" "请打开:分析表(物理备课组)")
path_out = filedialog.askopenfilename()
try:
# 清除目标数据
wb_out = app.books.open(path_out)
wh_out = wb_out.sheets['数据']
wh_out['B2:S54'].value = '' # 或者 sh_out['B2:S54'].clear()
wb_out.save()
# 提取来源数据,将总分按班级保存到对应工作表
wb_in = app.books.open(path_in)
wh_in = wb_in.sheets['学生小题成绩']
values = wh_in.range('A1').options(pd.DataFrame header=1 index=False expand='table').value
values = values.groupby('班级')
wb_temporary = app.books.add()
for idx group in values:
wh_temporary = wb_temporary.sheets.add(idx)
wh_temporary['A1'].options(index=False).value = group['总分']
wh_temporary.autofit()
wb_temporary.save(r'D:\临时班级总分表.xlsx')
wb_temporary.close()
# 清除0分
wb_new = vb.load_workbook(r'D:\临时班级总分表.xlsx')
wh_new = wb_new.worksheets
for i in wh_new:
for j in i:
for k in j:
if k.value == 0 :
k.value = ' '
wb_new.save(r'D:\临时班级总分表.xlsx')
wb_new.close()
# 把分数写入汇总表
wb_temp = app.books.open(r'D:\临时班级总分表.xlsx')
k =2 # 目标工作表的列号从第2列开始
for i in range(18 -1 -1): # 按顺序取18到0作为工作表的序号,用来打开对应班级的工作表
wh_temp = wb_temp.sheets[i]
row_num = wh_temp['A1'].expand('table').last_cell.row # 获取数据区域的最大行号
column = chr(63 k) # 将k的数值换成对应的列号
for j in range(2 row_num 1): # 遍历数据区域的所在列的单元格
wh_out.range('{}{}'.format(column j)).value = wh_temp.range('A{}'.format(j)).value # 将对应数据写入目标区域对应的单元格
k = k 1 # 列数字加1,让另一个班的数据写入下一列中
wb_out.save()
wb_out.close()
wb_temp.close()
os.remove(r'D:\临时班级总分表.xlsx')
finally:
app.quit()
messagebox.showinfo("提示" "分数已填入")