python实现自动化查谁没交作业

作为一个学委总是被查谁没交作业这种事所困扰,今天下午没课就打算写一个小程序帮我自动化查谁没交作业,并且根据助教的需求添加一个序号方便批改作业
​刚开始想着是用java写的,因为想做个可视化窗口,但是gui都忘的差不多了,所以就想着用C++,毕竟平时打算法题用的都是C++,想着用判断子序列算法来寻找同学提交的作业名中的姓名,但是最后还是选择了python,因为里面的find函数都可以直接找出文件名中的名字,最后代码量都不到50行
但是这个用find函数也有缺陷,如果一个班里有人既有张三也有张三四,即一个人名是另一个人名的前缀的话,就会有bug,但是咱班没有
用了它,以后可以快乐地收作业了

需求


​1.输出谁没交作业

2.重命名文件,添加上序号

3.导入名单的时候少数民族同学仅需要导入前半段名字即可,防止因为名字不全导致查不出人。

例:艾利希尔·里提普 需要改成艾利希尔

代码

import os

name_dic = [] #存名单
submit_name = [] #用来存已提交同学的名单

path = "C:\\Users\\alan\\Desktop\\重要文件\\20-5软件工程实验一" # 存放作业的文件夹
name_path = "D:\\0pythonProject\\findDick\\studentName" #同学名单txt文件,注意名单即为默认序号!
topic = "" #加的文件名后缀
front = "实验1-软件20-5-"#加的文件前缀名

def formate_dir(name_dic, dir_name):  # 格式化文件名 name_dic->同学名字  dir_name->同学提交的文件名
    for name in name_dic:
        index = dir_name.find(name) #找到姓名
        indes_file = dir_name.rfind(".")
        if index >= 0:
            submit_name.append(name)  # 将提交上的同学加入名单
            return front + str(d[name]) + '-' + name + topic + dir_name[indes_file:]# 输出文件的格式

    return 'no_name' + dir_name

def find_not_submit(name_dic, submit_name): #看看哪位同学没有交作业
    no_submmit = []
    for name in name_dic:
        if name not in submit_name:
            no_submmit.append(name)
    return no_submmit

with open(name_path ,'r', encoding='UTF-8') as lines: #读入学生姓名存入到name_dir中
    for line in lines:
        name_dic.append(line.strip())

fileList = os.listdir(path)  #读入存放的文件

lst = [i for i in range(1, len(name_dic))] #用来存序号
d = {item:price for item, price in zip(name_dic, lst)} #建立字典,用于添加同学们的序号

for file_name in fileList:
     new_name = formate_dir(name_dic, file_name) #获得格式化后的文件名
     #os.rename(os.path.join(path, file_name), os.path.join(path, new_name)) 如果需要修改#文件名请开启这个代码

# 打印没有提交作业的同学的名单
result = find_not_submit(name_dic, submit_name)
print(result)

最终效果

这是收到的文件,杂乱无章 

改后的文件 格式为 20-5 + 序号 + 名字 + 实验二

 最终输出没交的同学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值