没错!办公自动化他来了!果然,代码都是懒人发明出来的。接下来让我们一起来看看这个批改作业的自动化脚本吧!学会了这种思想可以帮助我们高效解决许多重复性的工作,比如说批量修改文件的名称、类型、位置等等,快让我们通过一个案例一起学起来吧!
Python办公自动化主要是批量化、自动化、定制化解决数据问题,目前主要分为三大块:自动化office、自动化机器人、自动化数据服务。办公自动化(Office Automation,简称OA)是将现代化办公和计算机技术结合起来的一种新型的办公方式。办公自动化没有统一的定义,凡是在传统的办公室中采用各种新技术、新机器、新设备从事办公业务,都属于办公自动化的领域。 通过实现办公自动化,或者说实现数字化办公,可以优化现有的管理组织结构,调整管理体制,在提高效率的基础上,增加协同办公能力,强化决策的一致性 。
有一个子目录“zuoye”有若干文本文件,gbk编码。分别存储了每个学生提交上来的算术作业,文件名是学生的学号。算术作业包括+-*/,每行一道题设计一个自动批改程序,要求完成以下功能允许每个数前后可能有空白,允许结果为负数的情况,运算的数均为正整数。除法只考虑能整除的情况,要考虑可能有空白行,可能出现在文件的任意位置空白行不计入总题数,格式错误的题数计入总题数将批改结果保存到文件“results.txt“”,每一行记录学号,答对的百分比。
txt文件如下:
需要的结果如下:
import os
import rename_list = []
allname_list = []
result_dic = {}target = os.walk("zuoye")for root, ds, fs in target:for f in fs:allname_list.append(f)name_list.append(f[:7:])def calculator(expression):if "+" in expression:sign = "+"elif "-" in expression:sign = "-"elif "*" in expression:sign = "*"else:sign = "/"num_list_1 = []num_list_2 = []split_list_1 = re.split("[=]", expression)split_list_2 = re.split("[*,=,+,/,-]", expression)for i in split_list_1:num_list_1.append(i.replace(" ", ""))if int(num_list_1[-1]) < 0:for i in split_list_2:num_list_2.append(i.replace(" ", ""))num_1 = num_list_2[0]num_2 = num_list_2[1]num_3 = num_list_2[-1]try:int(num_1) * int(num_2) * int(num_3)except ValueError:return 0else:if -int(num_3) == eval(f"{num_1}{sign}{num_2}"):return 1else:return 0else:for i in split_list_2:num_list_2.append(i.replace(" ", ""))num_1 = num_list_2[0]num_2 = num_list_2[1]num_3 = num_list_2[2]try:int(num_1) * int(num_2) * int(num_3)except ValueError:return 0else:if int(num_3) == eval(f"{num_1}{sign}{num_2}"):return 1else:return 0def func(num):r = open("zuoye"+'\\{0}'.format(allname_list[num]),encoding="GBK")tem_list = []result_list =[]line = r.readline()while line:# isspace()方法判断当该行是空行时,跳过该行if line.isspace():line = r.readline()else:line = line.strip('\n') #去掉列表中每一个元素的换行符tem_list.append(line)line = r.readline()for i in tem_list:result_list.append(calculator(i))result_dic[name_list[num]] = sum(result_list)/len(result_list)Note = open('result.txt',mode='w')
for i in range(0,len(allname_list)):func(i)Note.writelines([str(list(result_dic.keys())[i])," ",str(list(result_dic.values())[i]),"\n"]) #\n 换行符