学委必备小工具——筛选未提交人数【python小工具】

news2024/9/23 21:30:28

问题描述

作为一个学委,通常的任务就是收取班级作业,然后向老师报告当前未交人员的名单

JS版本:实现以一个表格数据查询另一个表格【JS】

之前我已经尝试通过用JS实现了,本质上差别其实也不是很大,只是对于JS来说,文件处理是它的硬伤之一,因为他设计之初就不是为了文本处理,而且你要想,如果js能随意获取你计算机上的文件,那会不会有些惊悚了(当然可以通过node中的fs模块实现,但终究有点小问题)

因此,为针对文件处理这一类的问题,我就尝试使用python去解决了

需求描述

  • 获取当前已提交文件的所有人
  • 获取班级名单Excel
  • 查询未提交的人数

实现代码

import os
import xlrd
import re
turnInPath = input('已上交的文件目录:')
classListPath = "D://Leo//Document//Class//xxxxxx.xlsx"
# os.listdir:参数为文件夹路径,可以返回文件夹下的所有子文件夹、文件名称
# 不能返回子文件夹下的文件
fileArr = os.listdir(turnInPath)
fileStr = "|".join(fileArr)

worksheet = xlrd.open_workbook(classListPath)
sheet_names= worksheet.sheet_names()
for sheet_name in sheet_names:
    sheet = worksheet.sheet_by_name(sheet_name)
    cols = sheet.col_values(1) # 获取第二列内容, 数据格式为此数据的原有格式(原:字符串,读取:字符串;  原:浮点数, 读取:浮点数)
    del cols[0] # 删除第一位的列名
    classList = cols


isChinese = re.compile(u'[\u4e00-\u9fa5]') #中文的范围为\u4e00-\u9fa5
turnInList = []
for fileName in fileArr:
    arr = isChinese.findall(fileName)
    turnInList.append(''.join(arr))

# 在提交列表 & 在班级列表 (为了处理非本班的提交)
# 若能完全确定一定是本班的,则为了效率可注释
# 该段代码通常适用于 两个班混交 or 统一分组(不过这个需要读取Excel了)
# diff = [ ]
# for item in turnInList: 
#     if(item in classList):
#         diff.append(item) 

# 在班级列表 && 不在(真实上交列表)
for item in classList:
    if(item not in "".join(turnInList)):
        print(item)

代码解释

获取已提交人员信息

输入路径

为方便多次复用,这里特地将文件目录进行输入,并进行适当提示

turnInPath = input('已上交的文件目录:')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sAwNDvTI-1670687485616)(assets/image-20221210234232-erxlaeu.png)]

读取文件夹

通过使用python内置模块os,获取所有文件名称

# os.listdir:参数为文件夹路径,可以返回文件夹下的所有子文件夹、文件名称
# 不能返回子文件夹下的文件
fileArr = os.listdir(turnInPath)

读取中文

从所有提交名单中获取中文(中文名称大概率就是姓名了,当然可能存在作业等冗余后缀,这些后面会处理)

  • 设置正则
  • 循环处理

isChinese = re.compile(u'[\u4e00-\u9fa5]') #中文的范围为\u4e00-\u9fa5
turnInList = []
for fileName in fileArr:
    arr = isChinese.findall(fileName)
    turnInList.append(''.join(arr))

首先对os.listdir进行循环,获取所有文件名中为中文的,放入turnInlist数组中

获取班级名单

设置班级名单路径

因为这里班级名单基本不变,因此就直接定为常量了

classListPath = "D://Leo//Document//Class//xxxxx.xlsx"

打开花名册

worksheet = xlrd.open_workbook(classListPath)

获取列

sheet_names= worksheet.sheet_names()
for sheet_name in sheet_names:
    sheet = worksheet.sheet_by_name(sheet_name)

获取列

 sheet = worksheet.sheet_by_name(sheet_name)
    cols = sheet.col_values(1) # 获取第二列内容, 数据格式为此数据的原有格式(原:字符串,读取:字符串;  原:浮点数, 读取:浮点数)
    del cols[0] # 删除第一位的列名
    classList = cols

这里解释一下为什么要杀出数组的第一个

因为通常情况下,我们的班级名单中的列通常会是这样的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MJ4NkgS-1670687485617)(assets/image-20221210234928-g27cfah.png)]

这样就会多余出一行来

输出未提交名单

# 在班级列表 && 不在(真实上交列表)
for item in classList:
    if(item not in "".join(turnInList)):
        print(item)

这里只需要注意一点的就是"".join(turnInList),为什么这里需要转为字符串?

因为这里我们需要做到的是最大匹配

也就是说,如果有一个提交的命名为张三的作业.xxx的话,通过判断是否是classList中的元素是否是turnInList的子串即可实现对张三的判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础之《netty(11)—netty模型》

一、简单说明 1、工作原理示意图 netty主要基于主从Reactors多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor。 2、说明 (1)BossGroup线程维护selector,只关注Accept事件。 (2)当接收到…

[附源码]Node.js计算机毕业设计出版社样书申请管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

第十一章 特征选择与稀疏学习

11.1 子集搜索与评价 我们将属性称为特征,对当前学习任务有用的属性称为相关特征、没什么用的属性称为无关特征。还有一类特征称为冗余特征,它们所包含的信息能从其他特征中推演出来,冗余特征在很多时候不起作用,去除它们会减轻学…

redis之如何应对并发访问问题

写在前面 本文一起看下Redis的并发访问控制。 1:单线程的Redis为什么会有并发问题 我们知道,Redis是单线程的,为什么还是会有并发问题呢?没错,如果是单命令操作的话肯定没有并发问题,但考虑事务的场景&a…

nodejs+vue人事管理系统30n9o

开发语言:nodejs 框架:Express 数据库:mysql 数据库工具:Navicat11 开发软件:VS code 浏览器:谷歌浏览器 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 …

使用VS2019开发调试Android动态库

1. 环境准备 1.1 安装JDK:jdk1.8.0_112 1.2 安装Android SDK SDK可以安装指定的platforms和ndk-bundle。为了兼容性考虑,单独安装了版本比较老的android-ndk-r10b 1.3 安装VS2019 安装VS2019并选择:使用C的移动开发。 1.4 连接开发手机…

基于Java+Mysql实现(web)大型企业管理系统【100010019】

第一章 系统概述 包括用户管理、权限管理、软件项目管理、软件模块管理、测试用例管理、测试任务分配、bug管理等功能。实现公司不同部门间团队协作,管理人员也能够更加有效的把控系统开发的进度。 本实验综合应用JavaWeb编程中的Servlet,JSP&#xff…

spring——Spring自动装配(基于注解)——前提了解——Spring的@Autowired注解为什么用在接口上 (转载)...

大家都知道Service注入的是实现类serviceImpl,那使用时怎么能获取到接口,而且还能调用到实现类的方法。 接口: public interface TestService{ public String test(); }实现类: Service public class TestServiceImpl imp…

Netty_04_消息协议设计与实战(实践类)

文章目录一、前言二、整体运行:先启动服务端,然后启动客户端,发送三条消息三、客户端和服务端3.1 客户端(重要)3.2 服务端(重要)3.3 编码和解码(了解即可)四、尾声一、前言 源码下载:https://www.syjshare.com/res/XEE10LTG 二、…

【Linux修炼】10.进程地址空间

每一个不曾起舞的日子,都是对生命的辜负。 进程地址空间本节目标1. 回顾C/C地址空间1.1 提出问题1.2 见问题产生的现象1.3 解释现象2. 虚拟地址空间2.1 感性理解虚拟地址空间 2.2 如何“画饼”2.3 地址空间的区域划分3. 进程地址空间与内存的关系3.1 虚拟地址和物理…

LabVIEW编程LabVIEW开发 ADAM-4056 DO模块例程与相关资料

LabVIEW编程LabVIEW开发 ADAM-4056 DO模块例程与相关资料 ​ADAM-4056SO是具有12通道自源型携带Modbus协议隔离数字输出模块。具有如下特点: ADO源电源故障检测 输入/输出类型:源式输出 12通道 数字输出:VCC: 1~35伏直流电&a…

基于Java+Mysql实现(WEB)宿舍管理系统【100010016】

数据库实践课程之宿舍管理系统 一、系统需求分析 1.1 系统描述 随着社会的发展以及教育水平的提高,当今社会在校生的数量越来越庞大,使用传统的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天,使用数据库技术对学生的…

Go 实现希尔排序算法及图解

耐心和持久胜过激烈和狂热。 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现希尔排序算法。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本…

游戏开发51课 性能优化9

4.5 光照模型(Lighting/Illumination Model) 4.5.1 Flat Shading(平面着色) 根据表面法向量计算光照,并应用到整个面片上。速度最快,效果最差,容易暴露物体的多边形本质(下图&…

微服务框架 SpringCloud微服务架构 29 ES 集群 29.4 分布式新增和查询流程

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.4 分布式新增和查询流程29.4.1 ES集群的分布式存储29.4.2 总…

鸿蒙手机卸载内置应用 adb连接

鸿蒙手机傻瓜式卸载内置应用 adb连接**傻瓜式删除鸿蒙系统内置应用,自己亲测有效。**准备物品准备软件准备工作教程开始:第一步第二步完成包名列表一般软件谷歌服务格外的注意连接错误**鸣谢**傻瓜式删除鸿蒙系统内置应用,自己亲测有效。 准…

缓存数据丢了,原来是Redis持久化没玩明白

📣📣📣📣📣📣📣 🎍大家好,我是慕枫 🎍前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识 &#x…

Windows下MySQL5.5升级5.7(或直接安装MySQL5.7)

Windows下MySQL5.5升级5.7(或直接安装MySQL5.7) 1、关闭MySQL服务: Ctrl shift Esc找到服务,找到下面的MySQL服务,停止服务。 2、卸载程序: 控制面板中卸载mysql5.5。 3、删除mysql5.5的安装目录及注…

Linux文件操作

文章目录前言什么是文件文件操作C语言文件操作接口文件操作系统调用接口文件描述符如何理解FILE和文件描述符的关系前言 本文主要介绍的是Linux系统下的文件操作和Linux的文件系统的机制,希望能够通过本文来增加读者对于文件操作的基本使用和理解。以及了解Linux系…

【大数据入门核心技术-Ambari】(一)Ambari介绍

一、什么是Ambari Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari 支持HDFS、MapReduce、Hive、Pi…