Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)

Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)

Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)-寻找资源网
Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)
此内容为付费资源,请付费后查看
10
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
seekresource@163.com
1919588043
QQ1919588043
寻找资源网
微信小店:活生好美
付费资源

前言

你是否遇到过把答案复制到题库中对应习题的情形?
最近收到一个这样的问题,有一组题库,习题和答案都以docx格式保存。现需要把选项答案填入到对应习题的括号内。

图片[1]-Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)-寻找资源网

图片[2]-Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)-寻找资源网

先来算笔账:如果手动来填,按照正常的速度,需要找到习题,核对题号、找到答案、确定位置、手动复制粘贴或键盘录入。平均完成一首题大约需要5秒钟。中间还可能看划错题号,输错答案,万一出错或串行,回头核对,时间会更长。粗略估计,这个题库约900道习题,要手动来完成,一刻不停,大约需要5000秒。期间,手还要不停在鼠标和键盘之间来回切换——这哪里是在办公,简直就是“体力活”,想想都觉得崩溃。
其实,对于类似的重复劳动,用Python或Vba来解决,几行代码,一键运行就能搞定。
下面是用Python来解决这个问题的完整代码:

一键运行,1.4秒就搞定了600道单选题、301道判断题的答案录入工作:

图片[3]-Python高效办公:1.4秒自动填充900+题库答案,告别手动复制粘贴!(附件可下载)-寻找资源网

再来看代码解析:

1、导入模块

import re
from docx import Document
import time
  • re:正则表达式的库,用于匹配括号。
  • docx:用于读取、处理、写入、保存word文档的库。
  • time:时间库,用于记录时间,计算时长。

2、文档读取

s_t = time.time()
xiti_doc = Document("调车长中级理论知识.docx")
daan_doc = Document("调车长中级理论知识答案.docx")
tk = {}
  • time.time():记录开始时间
  • xiti_doc = Document(“调车长中级理论知识.docx”):读取文档并赋值给xiti_doc。
  • tk = {} :创建空字典,用于存放处理后的用于填空的答案。

3、提取答案

for table in daan_doc.tables:
    dic = {}
    for row in table.rows:
        for cell in row.cells:
            if "." in cell.text:
                key, value = cell.text.split(".") 
               dic[key] = value
    tk["单选题" if len(dic) > 500 else "判断题"] = dic
  • for table in daan_doc.tables:遍历所有的表格,把当前表格赋值给table。
  • for row in table.rows:遍历所有的行。
  • for cell in row.cells:遍历所有的单元格。
  • if “.” in cell.text: 如果单元格文本包含点号(题号.答案格式),有效过滤了不符合答案形式的单元格。
  • key, value = cell.text.split(“.”):用“.”分隔遍历出的答案,key为题号,value为答案。
  • dic[key] = value:把key作为键,value作为值写入dic字典。
  • tk[“单选题” if len(dic) > 500 else “判断题”] = dic:根据答案数量判断题型,单选题>500为单选题,否则判断题,把dic作为值写入tk字典。

4、定义正则表达式的查找内容

regex = '|'.join([  # 使用|连接多个正则模式,表示"或"的关系
    r'()',             # 匹配中文括号
    r'\(\)',            # 匹配英文括号
    r'\( \)',           # 匹配中间有空格的英文括号
    r'(\s*)',          # 匹配中文括号中间可能有空格
    r'\(\s*\)',         # 匹配英文括号中间可能有空格
    r'[\((]\s*[\))]'   # 匹配混合括号(中英文混合)中间可能有空格])
  • 使用“|”连接多个正则模式,表示”或”的关系
  • 匹配中文或英文下的括号类型

5、填充答案

for page in xiti_doc.paragraphs:
    if "单选题" in page.text:
        tx = "单选题"
        continue
    elif "判断题" in page.text:
        tx = "判断题"
        continue
            if "." in page.text:
        key, value = page.text.split(".")
        if t:=re.search(regex,page.text):
            page.text = page.text.replace(t.group(),f"({tk[tx][str(key).strip()]})")
  • for page in xiti_doc.paragraphs:遍历题库文档的每个段落
  • if “单选题” in page.text:首先判断段落中是否包含”单选题”,如果包含,则让tx =”单选题”,使用continue 跳过后续处理,继续下一个段落,否则让让tx =”判断题”。
  • if “.” in page.text:判断段落中是否包含点号,如果是则说明是题目,并使用.split(“.”)对段落内容进行分隔,key为题号,value为内容。
  • if t:=re.search(regex, page.text):对遍历出的段落执行正则表达式的匹配,如果匹配成功,则进入下面的判断。
  • page.text.replace(t.group(),f”({tk[tx][str(key).strip()]})”):用replace替换匹配出的括号为带答案的括号。

6、保存结果与输出统计

xiti_doc.save("调车长中级理论知识+答案.docx")
e_t = time.time()
print(f"答案已填入\n单选题{len(tk["单选题"])}个\n判断题{len(tk["判断题"])}个\n用时{e_t-s_t:.2f}秒。")
  • 保存处理的文档,并记录结束时间,显示处理结果。
其实这段代码不只是适用用来填充题库的答案,它还可以解决很多类似的问题,如把excel里的数据填到word模板里,其核心都是先把数据整理后写入字典,再按一定的规则匹配填充到指定位置。
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容