项目来源
作为一个辛勤又负责的学习委员,少不了帮助老师收取作业… 收作业的时候查找谁有没有交是很麻烦的… 所以写个程序来解决这个问题,同时还可以根据名单上的学号序号等,自动添加上学号、序号
采用了python进行开发,用pyqt制作了界面
刚开始想着是用java写的,因为想做个可视化窗口,但是gui都忘的差不多了,所以就想着用C++,毕竟平时打算法题用的都是C++,想着用判断子序列算法来寻找同学提交的作业名中的姓名,但是最后还是选择了python,因为里面的find函数都可以直接找出文件名中的名字,最后代码量都不到50行
但是这个用find函数也有缺陷,如果一个班里有人既有张三也有张三四,即一个人名是另一个人名的前缀的话,就会有bug,但是咱班没有
用了它,以后可以快乐地收作业了
最初只用了40行代码就可以实现了,大家可以看这个
python实现自动化查谁没交作业_falldeep的博客-CSDN博客
功能
1.查找未提交成员
根据导入班级成员名单自动查找未提交成员
2.文件重命名
可以进行批量重命名,一秒钟完成一万次操作
3.添加序号
可以批量添加序号,并指定起始和位数
4.添加学号
可以批量添加学号,并指定添加位置
源码
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)
效果