今天接到一个任务,要把学生的作业统计出来,统计每个同学交了多少次。
最近正在学习python,准备写一个练一下手
问题描述:
1.导出数据里边每个学生的姓名是序号+学号+姓名格式,但是同学们的命名顺序五花八门
有先写序号的,有先写名字的,所以需要提取中文获取他的名字
2.如果这个同学这次作业完成,那么在xlsx表格中他所在行有一个评分或者”带批改“(qq作业导出格式),没有提交的话改位置是”未提交“,因为只需要统计是否提交,所以只提取是否为”未提交“
3.有多次作业,需要提取每次作业数据,需要合理安排循环
解决方案:
读取输出表格格式
循环读取每次作业统计
提取每一行的姓名和对应的提交作业状态,在输出表格中找到他,如果是”未提交“,则把该行改为原来行添加一个[0],反之添加[1],
因为重名同学只有一个,所以不考虑用学号判定是否同名。
代码如下(chatgpt主力):
import os
import pandas as pd
import re
# 设置文件夹路径
folder_path ='path'
folder_path_sta ='path'
# 获取文件夹内所有文件名
files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]
stat_homework =pd.read_excel(folder_path_sta,header=None)
stat_homework = stat_homework.values.tolist()
# print(stat_homework)
# print(len(stat_homework))
# 初始化一个空列表,用于存储每个文件的数据作为列表
# 准备正则表达式模式,匹配汉字
pattern = re.compile(r'[\u4e00-\u9fff]+')
# modified_list = []
# 遍历文件名列表,读取每个Excel文件
for file in files:
file_path = os.path.join(folder_path, file) # 获取文件的完整路径
df = pd.read_excel(file_path) # 使用pandas读取Excel文件
data = df.values.tolist()
for row in data:
# 取得每行的第一个元素
first_element = row[0]
# 使用正则表达式提取汉字
chinese_characters = pattern.findall(first_element)
# 将提取到的汉字连接成一个字符串
chinese_string = ''.join(chinese_characters)
# print(chinese_string)
just_deliver = row[1]
# print(just_deliver)
# 打印或处理提取到的汉字
for i,row_new in enumerate(stat_homework):
# 检查指定元素是否在当前行
# print(row_new)
if chinese_string in row_new:
print(chinese_string)
print(just_deliver)
print(i)
print(row_new)
# 如果存在,给这一行末尾添加一个1
if just_deliver == "未提交":
row_new= row_new + ['是']
else:
row_new = row_new + ['否']
stat_homework[i] = row_new
# print(row_new)
# else:
# row_new = row_new + ["没有找到他的名字"]
# modified_list.append(row_new)
print(stat_homework[0])
df_back = pd.DataFrame(stat_homework)
# 指定输出的.xlsx文件路径
output_file = 'path'
最后可以达到这样的效果 后边使用excel统计的