用Python实现作业提交统计
excel文件第一列 学号
excel文件第二列 姓名
学生提交的word作业命名 学号+(班级/姓名),一定要有学号
import os
import xlrd
import time
from xlutils.copy import copy
import re
#(作业文件存放目录)获取目录下所有的文件名
file_name_submitted =os.listdir("C:/Users/29752/OneDrive/Documents/线上课程/离散数学/离散作业/第四次作业/")
s_file_name_submitted = list() #创建用于存放所有学号的列表
file_name_submitted = " ".join(file_name_submitted)
comp = re.compile("[0-9]{10}") #创建正侧表达式规则
s_file_name_submitted = comp.findall(file_name_submitted) #用正则表达式提取学号
read_book = xlrd.open_workbook("C:/Users/29752/OneDrive/Documents/线上课程/离散数学/离散作业/作业提交统计.xlsx")#打开excel文件
write_book = copy(read_book) #创建excel文件的副本,用于存放输出的结果
read_sheet = read_book.sheets()[0] #选择第一个sheet表
name_list = read_sheet.col_values(1) #读取excel文件的姓名列
write_col = 5 #需要写入数据的excel文件行
all_students_id=list() #所有学生的学号
not_submitted = 0 #未提交数量
had_submitted = 0 #已提交的数量
for i in range(1,read_sheet.nrows): #遍历整个excel表,获取所有同学的学号
temp = read_sheet.cell(i,0).value #读取第i行,第0列
temp = str(temp)[:10] #按照指定格式获取数据
all_students_id.append(temp) #将学号放入all_students_id列表中
write_sheet = write_book.get_sheet(0)
for i in range(len(all_students_id)): #遍历所有学生的学号
if all_students_id[i] in s_file_name_submitted: #如果学号在已提交的文件中
write_sheet.write(i+1,write_col,1) #在输出的excel文件中进行标记
had_submitted +=1
else:
print(all_students_id[i],name_list[i+1].strip()) #如果未提交,则输出学生的学号和名字
not_submitted +=1
print(not_submitted-1,"人未提交")
print(had_submitted,"已提交")
print("\t以下同学未统计在excel中")
for i in s_file_name_submitted:
if i not in all_students_id:
print(i)
write_book.save("E:/作业统计out.xls")
输出样例
11802***** XXX
11904***** XX
11801***** XXX
65 人未提交
31 已提交
以下同学未统计在excel中(显然没有)