懒人的法宝——办公自动化!

news2025/7/21 17:09:06

没错!办公自动化他来了!果然,代码都是懒人发明出来的。接下来让我们一起来看看这个批改作业的自动化脚本吧!学会了这种思想可以帮助我们高效解决许多重复性的工作,比如说批量修改文件的名称类型位置等等,快让我们通过一个案例一起学起来吧!

一、什么是办公自动化? 

Python办公自动化主要是批量化、自动化、定制化解决数据问题,目前主要分为三大块:自动化office自动化机器人自动化数据服务办公自动化(Office Automation,简称OA)是将现代化办公和计算机技术结合起来的一种新型的办公方式。办公自动化没有统一的定义,凡是在传统的办公室中采用各种新技术、新机器、新设备从事办公业务,都属于办公自动化的领域。 通过实现办公自动化,或者说实现数字化办公,可以优化现有的管理组织结构,调整管理体制,在提高效率的基础上,增加协同办公能力,强化决策的一致性 。

二、实战案例

有一个子目录“zuoye”有若干文本文件,gbk编码。分别存储了每个学生提交上来的算术作业,文件名是学生的学号。算术作业包括+-*/,每行一道题设计一个自动批改程序,要求完成以下功能允许每个数前后可能有空白,允许结果为负数的情况,运算的数均为正整数。除法只考虑能整除的情况,要考虑可能有空白行,可能出现在文件的任意位置空白行不计入总题数,格式错误的题数计入总题数将批改结果保存到文件“results.txt“”,每一行记录学号答对的百分比

txt文件如下:

 需要的结果如下:

 

三、思路描述

  1. 首先我们可以先对一个文件去操作,比如说学号为1002131的同学,我们通过读取这名称的文件,读取其中的每一行,再自定义一个函数,对其中的每一行进行判断,判断其是否计算正确,统计这个同学的正确率,用字典将姓名与正确率相关联。这样就可以得到这一位同学的正确率。
  2. 有了读取以为同学的思路,那么我们也可以通过读取一个文件夹,将文件夹中的每个同学进行操作,这样就可以得到这个文件夹下所有同学的正确率。同样我们用字典将学号与正确率相关联,便于最终输出。
  3. 经过前两步,我们已经得到一个字典,这个字典的键是每一位同学的序号,值是该同学的正确率。只要分行将对应结果输出到指定文件中就完成啦!

 四、完整代码

import os
import re

name_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 0
        else:
            if -int(num_3) == eval(f"{num_1}{sign}{num_2}"):
                return  1
            else:
                return 0
    else:
        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 0
        else:
            if int(num_3) == eval(f"{num_1}{sign}{num_2}"):
                return 1
            else:
                return 0


def 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 换行符

五、代码讲解

  1. 首先我们读取指定的文件夹,即“zuoye”文件夹,用target = os.walk("zuoye"),返回三个对象,最后一个即为所有文件的名称列表,所有我们只用对最后一个fs进行遍历就可以。将所有文件名添加到一个列表中,并另外用字符串切片的方式取出.txt。
  2. 接下来就是最关键的判断函数,这个函数的作用即判断输入的一个表达式是否正确,首先要确定符号,用if elif和else判断输入的到底是加减乘除什么类型表达式。再用正则表达式,用[*,=,+,/,-]对表达式进行切分,这里注意,如果有负数的情况,负数前面也会有-号,所以这里要用一个if语句进行判断。
  3. 将切割的结果赋值给三个变量,并且注意要用i.replace(" ", "")去除空格,要不然后面没办法用int转化。这样我们就拿到了三个数,以及他们的运算符号,我们用if int(num_3) == eval(f"{num_1}{sign}{num_2}")判断这个表达式是否正确既可以啦,如果正确返回1,如果错误返回0,即做对得1分,做错得0分。
  4. 之后,再读取文件夹里面的每一个文件,读取每一个文件的每一行,如果读到空行就跳过,不统计在里面,将读取的每一行用上面的自定义函数进行判断,统计每一个文件的总得分率,与文件总行数(去除空行)相除得到正确率。最后通过字典将该同学的学号和正确率关联起来。
  5. 最后,通过Note.writelines([str(list(result_dic.keys())[i])," ",str(list(result_dic.values())[i]),"\n"])将所得结果写入到result文件中,这样我们完成啦!

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

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

相关文章

【附源码】计算机毕业设计JAVA计算机系教师教研科研管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

计算机网络-网络层(BGP协议,IP组播,IGMP协议与组播路由选择协议)

文章目录1. BGP协议BGP协议报文格式2. RIP&#xff0c;OSPF&#xff0c;BGP协议对比3. IP组播4. IGMP协议与组播路由选择协议1. BGP协议 与其他自治系统的邻站BGP发言人&#xff08;BGP边界路由器&#xff09;交换信息 BGP边界路由器之间交换网络可达性的信息&#xff0c;即要…

C++Qt开发——SMTP协议

1. SMTP协议简介 SMTP协议&#xff1a;全称为 Simple Mail Transfer Protocol&#xff0c;简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间&#xff0c;以及两台SMTP邮件服务器之间的通信规则。 SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的…

网络安全之命令执行漏洞复现

0x01 漏洞介绍 漏洞等级&#xff1a;严重 Webmin是功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。在版本1.997之前的Webmin中存在一个任意命令注入漏洞&#xff0c;触发该漏洞需登录Webmin。 0x02 漏洞影响范围 …

GitHub最新发布 阿里十年架构师手写版spring全家桶笔记全新开源

嗨咯&#xff0c;大家好&#xff01; 没错&#xff0c;又是我&#xff0c;还跟前面一样&#xff0c;有好东西我才会出现。那是什么好东西呢&#xff1f;今天啊&#xff0c;给他分享阿里在Github最新发布的spring全家桶笔记第九版&#xff0c;这份笔记一共分三份&#xff1a;sp…

自学前端开发 - VUE 框架 (二):渲染、事件处理、表单输入绑定、生命周期、侦听器、组件基础

[TOC](自学前端开发 - VUE 框架 (二) 事件处理、表单输入绑定、生命周期、侦听器、组件基础) 事件处理 可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件&#xff0c;并在事件触发时执行对应的 JavaScript。用法&#xff1a;v-on:click"methodName" 或 click"ha…

音视频进阶知识

亮度方程 亮度方程给出彩色光的亮度Y与三基色&#xff08;R、G、B&#xff09;的关系式Y1.0000R4.5907G0.06015B 在不同的彩色电视制式中&#xff0c;由于所选的标准白光和显像三基色不同&#xff0c;导致亮度方程也互有差异。 以C光为标准白光源的NTSC制彩色电视制式的亮度方程…

[java/初学者/GUI编程]GUI界面设计——界面组件类

前言 GUI&#xff0c;即图形用户界面&#xff0c;其英文全称是Graphics User Interface。 它是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是编出一个图形用户界面的软件&#xff0c;它使用图形的方式&#xff0c;以菜…

昇思MindSpore时序AI SIG,共同提高序列大数据分析能力

随着信息产业技术的升级&#xff0c;产生了大规模的时间序列数据&#xff0c;长期并广泛存在于工业制造、航空航天、公共卫生、环境保护等关键基础领域。时间序列信息能够被充分理解、计算和利用&#xff0c;实现精准预测并辅助决策&#xff0c;是关系到国家竞争力的重要问题。…

Adaptive Cruise Control (ACC) Test Scenarios(PreScan里面的ACC)

文章目录Adaptive Cruise Control (ACC) Test Scenarios PreScan scenario models available with the ACC system ACC模型的几个预扫描场景可用&#xff1a; 真实生活场景–系统的典型用例 ISO测试协议 这些模型展示了如何使用PreScan对ADAS系统进行建模&#xff0c;并提供“…

Day 56 | 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇

583. 两个字符串的删除操作 解法一&#xff1a;直接求删除的步数 动态规划解题思路&#xff1a; ①确定dp数组以及下标含义 dp[i][j]&#xff1a;以下标i-1结尾的字符串s与下标j-1结尾的字符串t想要达到相等&#xff0c;所需要删除元素的最少次数。 ②确定递推公式 每次…

spring - AnnotationConfigApplicationContext启动之reader、scanner、register逻辑整理

前言 我们在使用spring framework时一般都喜欢按照以下方式写启动 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class); 而我们的AnnotationConfigApplicationContext的内容如下 public AnnotationConfigAp…

长时间预测模型DLiner、NLiner模型(论文解读)

前言 今年发布8月份发布的一篇有关长时间序列预测&#xff08;SOTA&#xff09;的文章&#xff0c;DLiner、NLine在常用9大数据集&#xff08;包括ETTh1、ETTh2、ETTm1、ETTm2、Traffic等&#xff09;上MSE最低&#xff0c;模型单变量、多变量实验数据&#xff1a; 在计算资…

Appium学习日记(二)—— 入门学习(安装Appium和配置环境)

入门 1、安装 Node.js 进入nodejs的官网下载安装包安装&#xff0c;一路点击下一步就行。 安装完毕之后&#xff0c;打开命令行&#xff0c;输入&#xff1a;node -v;显示类似于v10.13.0的版本号信息则表示安装成功。 2、安装Appium以及相关环境配置 Appium可以通过两种方式之…

【Kafka】(1)基础知识汇总

TOC &#xff08;1&#xff09;Kafka简介 &#xff08;1&#xff09;简单介绍 Kafka是一种消息队列&#xff0c;主要用来处理大量数据状态下的消息队列&#xff0c;一般用来做日志的处理。既然是消息队列&#xff0c;那么Kafka也就拥有消息队列的相应的特性了。 &#xff0…

Python3 VSCode 配置

VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软开发的跨平台免费源代码编辑器。VSCode 开发环境非常简单易用&#xff0c;仅需要安装相关的插件进行简易的配置就可以与原有的python环境组成一套具有简单的代码调试运行的开发工具。对于轻量级的…

聚焦“碳中和”,成都超算中心牵手重庆大学唱好“成渝双城记”

为了积极稳妥推进碳达峰碳中和&#xff0c;加快成渝双城经济圈建设。重庆大学牵手国家超算成都中心和成都计算狗数据科技有限公司&#xff0c;开展了关于CO2电催化还原反应的路径计算工作&#xff0c;积极推动川渝两地实现产学研合作和成果落地转化&#xff0c;深入推进能源革命…

【C++】运算符重载

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b; 目录 为什么要重载运算符&#xff1f; 运算符重载 重载就一定要吗&#xff1f; 重载后的运算符和普通运算符有什么区别&#xff1f; 总结 为什么要重载运算符&#xff1f; 先看代码&#xff1a; #include <…

腾讯实时股票数据接口怎么获取行情?

腾讯实时股票数据接口怎么获取行情&#xff1f;以五粮液为例&#xff0c;要获取最新行情&#xff0c;访问数据接口&#xff1a; 返回数据&#xff1a;v_sz000858"51~五 粮 液~000858~27.78~27.60~27.70~417909~190109~227800~27.78~492~27.77~332~27.76~202~27.75~334~27.…

做SEO为什么有的网站收录很难做?

刚开始做网站的时候&#xff0c;经常遇到网站收录难的问题。有时候一个月都没收录&#xff0c;急得还是忍不住。我困惑了很久。每天都在想是什么原因导致我的网站没有被收录&#xff0c;很无奈也很难过。那时候我还不知道搜索引擎的工作原理&#xff0c;也不知道从何入手。我像…