Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >利用Python将Word试卷匹配转换为Excel表格

利用Python将Word试卷匹配转换为Excel表格

作者头像
数据森麟
发布于 2021-01-25 04:22:21
发布于 2021-01-25 04:22:21
3.2K00
代码可运行
举报
文章被收录于专栏:数据森麟数据森麟
运行总次数:0
代码可运行

需求

有一个下面这种形式的word表格:

希望能转换为下面这种格式的excel表格:

测试word文档读取

先测试一个word文档前1页的数据读取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from docx import Document

doc = Document("编号02 质检员高级技师(一级)理论试卷.docx")
for i, paragraph in enumerate(doc.paragraphs[:55]):
    print(i, paragraph.text)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 职业能力评价理论试卷
1 (一级. 质检员)
2 注意事项:1.答卷前将密封线内的项目填写清楚。
3 2.填写答案必须用蓝色(或黑色)钢笔、圆珠笔,不许用铅笔或红笔。
4 3.本份试卷共四道大题,满分100分,考试时间120分钟。
5 一、单项选择题(140题。选择正确的答案,将相应的字母填入题内的括号中。每题1分,满分40分。)
6 1. 关于道德的叙述,正确的是(   )7A)道德中的“应该”与“不应该”因人而异,没有共同道德标准
8B)道德是处理人与人之间、人与社会之间关系的特殊行为规范
9C)道德是现代文明的产物        
10D)道德从来没有阶级性
11 2.以下哪个选项不属于遵守职业纪律(    )12A)右侧行驶		   (B)客人先行 	        (C)先抑后扬   	  (D)下班锁门 
13 3. 国际标准化组织ISO90002000标准中,把质量定义为一组(     )特性满足要求的程度。
14A)常量		       (B)变量		        (C) 流动	        	(D)固有
15 4. 软件是有通过载体表达的信息所组成的(   )产品。
16A)知识	           (B)信息	        	(C)数据              (D)标准
17 5. (   )是指由最高管理者正式发布的与质量有关的组织总的意图和方向。
18A)质量目标        (B)质量方针           (C)质量管理           (D)质量控制
19 6. ISO9000族当中,(    )和八项管理原则一直是最核心的内容。
20APCDA模式        (BPCDA循环          (CPDCA模式          (DPDCA循环
21 7.(  )是第一家实施六西格玛管理的公司。 
22A)通用电气          (B)摩托罗拉 
23C)丰田         (D)微软
24 8. 产生、形成、实现、使用和衰亡的过程,质量专家朱兰称质量形成的这种过程为(    )。
25A)质量螺旋      (B)质量周期      (C)产品螺旋       (D)产品周期  
26 9. 计量值数据是指可以连续取值的数据,又称(    )数据。
27A)计量型        (B)连续型        (C)稳定型         (D)常规型
28 10. 国家标准当中强制性标准用(    )指代含义。
29ACCCBGBCGB/TDCCIB
30 11. 异常波动能引起系统性的(    )。
31A)失误或停滞      (B) 错误或中断    (C) 失效或缺陷    (D) 失败或终止 
32 12.(   )是判断和预报生产过程中质量状况是否发生波动的一种有效方法。
33A)分布图    (B) 质量图    (C) 控制图    (D) 控制界限
34 13. 过程能力一般采用标准差的6倍即6σ来量度,其计算公式为(    )。
35AB=6σ≈6S=24R/dn)   (BB=6σ≈6S=12R/d₂)          
36CB=6σ≈6S=6R/dn)    (DB=6σ≈6S=6R/d₂)
37 14. 提高过程能力的重要途径之一就是尽量减少σ,使质量特征值的离散程度(	 )。
38A)变大	         (B)变小          	(C)平稳          	(D)不变
39 15.(    )亦称频数分布图,它适用于对大量计量值数数据进行整理加工,找出其统计规律。
40A)直方图                             (B)散布图
41C)排列图                             (D)控制图
42 16. 因素在实验中所处的状态和条件变化可能引起指标变动,把因素变化各种状态和条件成为因素的( 	)。
43A)因子        (B)位级          (C)强度	        (D)状态
44 17. 1988年提出的一种确定客户需求和相应产品或服务性能之间联系的图示方法叫做(    )。
45A)质量屋      (B)顾客需求	    (C)技术要求	 	(D)关系矩阵
46 18. (    )是指产品在存放和使用过程中,随着时间的推移而直接影响产品质量特性稳定性的因素。
47A)外噪声	     (B)内噪声	    (C)随机噪声       (D)以上都不对·
48 19. (    )是产品设计的核心,在系统设计确定了产品或系统的目的功能及结构之后进行。
49A)参数设计    (B)常量设计     (C)变量设计     (D)系统设计
50 20. 以下不属于“双五归零”基本术语的是(     )。
51A)质量问题							(B)质量缺陷		
52C)重复性质量问题	                    (D)产品交付前的质量问题
53 21. 质量检验当中,(    )可以保证工艺过程的质量符合性。
54A)进货检验   (B)过程检验      (C)工艺检验      (D)最终检验

从读取效果上看,各行文本数据都能很顺利的获取到。

匹配题型、题目和具体的选项

现在我们需要做的是就是匹配题型、题目和具体的选项,观察可以发现规律:

  1. 题型以大写数字开头
  2. 题目以普通数字+.开头
  3. 选项以括号+字母开头

❝额外需要注意的:

  1. 开头几行文本也存在普通数字+.开头的,需要直接排除。
  2. 第7题的题目,和第19题的选项存在一些特殊的空白字符需要排除,
  3. 括号和小数点都同时存在半角和全角两种情况。

对于需要注意的第二点:

查看一下这2处的空白字符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doc.paragraphs[21].text
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'7.(\xa0\xa0)是第一家实施六西格玛管理的公司。\xa0'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doc.paragraphs[49].text
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'(A)参数设计    (B)常量设计\u3000    (C)变量设计\u3000\u3000   (D)系统设计'

发现分别是\xa0和\u3000。

整理好大致思路,我组织一下处理代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
from docx import Document

doc = Document("编号02 质检员高级技师(一级)理论试卷.docx")

black_char = re.compile("[\s\u3000\xa0]+")

chinese_nums_rule = re.compile("[一二三四]、(.+?)\(")
title_rule = re.compile("\d+.")
option_rule = re.compile("\([ABCDEF]\)")
option_rule_search = re.compile("\([ABCDEF]\)[^(]+")


# 从word文档的“一、单项选择题”开始遍历数据
for paragraph in doc.paragraphs[5:25]:
    #  去除空白字符,将全角字符转半角字符,并给括号之间调整为中间二个空格
    line = black_char.sub("", paragraph.text).replace(
        "(", "(").replace(")", ")").replace(".", ".").replace("()", "(  )")
    # 对于空白行就直接跳过
    if not line:
        continue
    if title_rule.match(line):
        print("题目", line)
    elif option_rule.match(line):
        print("选项", option_rule_search.findall(line))
    else:
        chinese_nums_match = chinese_nums_rule.match(line)
        if chinese_nums_match:
            print("题型", chinese_nums_match.group(1))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
题型 单项选择题
题目 1.关于道德的叙述,正确的是(  )。
选项 ['(A)道德中的“应该”与“不应该”因人而异,没有共同道德标准']
选项 ['(B)道德是处理人与人之间、人与社会之间关系的特殊行为规范']
选项 ['(C)道德是现代文明的产物']
选项 ['(D)道德从来没有阶级性']
题目 2.以下哪个选项不属于遵守职业纪律(  )。
选项 ['(A)右侧行驶', '(B)客人先行', '(C)先抑后扬', '(D)下班锁门']
题目 3.国际标准化组织ISO9000:2000标准中,把质量定义为一组(  )特性满足要求的程度。
选项 ['(A)常量', '(B)变量', '(C)流动', '(D)固有']
题目 4.软件是有通过载体表达的信息所组成的(  )产品。
选项 ['(A)知识', '(B)信息', '(C)数据', '(D)标准']
题目 5.(  )是指由最高管理者正式发布的与质量有关的组织总的意图和方向。
选项 ['(A)质量目标', '(B)质量方针', '(C)质量管理', '(D)质量控制']
题目 6.ISO9000族当中,(  )和八项管理原则一直是最核心的内容。
选项 ['(A)PCDA模式', '(B)PCDA循环', '(C)PDCA模式', '(D)PDCA循环']
题目 7.(  )是第一家实施六西格玛管理的公司。
选项 ['(A)通用电气', '(B)摩托罗拉']
选项 ['(C)丰田', '(D)微软']
题目 8.产生、形成、实现、使用和衰亡的过程,质量专家朱兰称质量形成的这种过程为(  )

从目前测试结果来看没有问题。

保存匹配到的数据到结构化字典

现在我打算将当前匹配出来的文本数据存储成字典形式的结构化数据,字典结构的设计如下:

根据上述设计完善代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
from docx import Document
from collections import OrderedDict

doc = Document("编号02 质检员高级技师(一级)理论试卷.docx")

black_char = re.compile("[\s\u3000\xa0]+")

chinese_nums_rule = re.compile("[一二三四]、(.+?)\(")
title_rule = re.compile("\d+.")
option_rule = re.compile("\([ABCDEF]\)")
option_rule_search = re.compile("\([ABCDEF]\)[^(]+")

# 保存最终的结构化数据
question_type2data = OrderedDict()
# 从word文档的“一、单项选择题”开始遍历数据
for paragraph in doc.paragraphs[5:]:
    #  去除空白字符,将全角字符转半角字符,并给括号之间调整为中间一个空格
    line = black_char.sub("", paragraph.text).replace(
        "(", "(").replace(")", ")").replace(".", ".").replace("()", "(  )")
    # 对于空白行就直接跳过
    if not line:
        continue
    if title_rule.match(line):
        options = title2options.setdefault(line, [])
    elif option_rule.match(line):
        options.extend(option_rule_search.findall(line))
    else:
        chinese_nums_match = chinese_nums_rule.match(line)
        if chinese_nums_match:
            question_type = chinese_nums_match.group(1)
            title2options = question_type2data.setdefault(question_type, OrderedDict())

遍历结构化字典并存储

然后我们遍历结构化字典,将数据保存到pandas对象中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd

result = []
max_options_len = 0
for question_type, title2options in question_type2data.items():
    for title, options in title2options.items():
        result.append([question_type, title, *options])
        options_len = len(options)
        if options_len > max_options_len:
            max_options_len = options_len
df = pd.DataFrame(result, columns=[
                  "题型", "题目"]+[f"选项{i}" for i in range(1, max_options_len+1)])
# 题型可以简化下,去掉选择两个字
df['题型'] = df['题型'].str.replace("选择", "")
df.head()

结果:

最终保存结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.to_excel("result.xlsx", index=False)

完整代码

最终完整代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import re
from docx import Document
from collections import OrderedDict

doc = Document("编号02 质检员高级技师(一级)理论试卷.docx")

black_char = re.compile("[\s\u3000\xa0]+")

chinese_nums_rule = re.compile("[一二三四]、(.+?)\(")
title_rule = re.compile("\d+.")
option_rule = re.compile("\([ABCDEF]\)")
option_rule_search = re.compile("\([ABCDEF]\)[^(]+")

# 保存最终的结构化数据
question_type2data = OrderedDict()
# 从word文档的“一、单项选择题”开始遍历数据
for paragraph in doc.paragraphs[5:]:
    #  去除空白字符,将全角字符转半角字符,并给括号之间调整为中间一个空格
    line = black_char.sub("", paragraph.text).replace(
        "(", "(").replace(")", ")").replace(".", ".").replace("()", "(  )")
    # 对于空白行就直接跳过
    if not line:
        continue
    if title_rule.match(line):
        options = title2options.setdefault(line, [])
    elif option_rule.match(line):
        options.extend(option_rule_search.findall(line))
    else:
        chinese_nums_match = chinese_nums_rule.match(line)
        if chinese_nums_match:
            question_type = chinese_nums_match.group(1)
            title2options = question_type2data.setdefault(
                question_type, OrderedDict())

result = []
max_options_len = 0
for question_type, title2options in question_type2data.items():
    for title, options in title2options.items():
        result.append([question_type, title, *options])
        options_len = len(options)
        if options_len > max_options_len:
            max_options_len = options_len
df = pd.DataFrame(result, columns=[
                  "题型", "题目"]+[f"选项{i}" for i in range(1, max_options_len+1)])
# 题型可以简化下,去掉选择两个字
df['题型'] = df['题型'].str.replace("选择", "")
df.to_excel("result.xlsx", index=False)

最终得到的文件:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据森麟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
盘点一个Python自动化办公的实战案例(word文件处理)
前几天在Python铂金交流群【Jethro Shen】问了一个Python自动化办公的问题,提问截图如下:
Python进阶者
2022/11/14
6960
盘点一个Python自动化办公的实战案例(word文件处理)
Python办公自动化 | word 文本转 excel
近日有工作上的需求,需要梳理数据元目录中的多个数据项,数据项条目可能达到1000多个,可以说这个工作量非常巨大,源文件是 word 版本的,无法进行筛选和标记(即使用颜色或者字体去标记之后,每次也需要肉眼去看某一项到底有没有梳理过),如果是 excel 版本就不一样了,已梳理和未梳理的可以很简单的完成分类,并且和其他文件进行比对,用以核实是否已经梳理过。
披头
2022/08/22
1.1K0
Python办公自动化 | word 文本转 excel
再也不用复制粘贴了!自动读取Word文件并写入Excel
在做数据分析时,虽然操作docx并不是常用操作,但有些时候,数据分析师拿到的文件是docx或doc的Word文件,尤其是对数据具有至关重要的数据字典。接下来以一个数据字典为例来介绍下python-docx读取Word文件的基本操作。并将Word中的表格内容写入excel中。
数据STUDIO
2021/06/24
2.7K0
python自动化办公——python操作Excel、Word、PDF集合大全
本文是鉴于有些粉丝的工作需求,有时候需要遇到这些文件的处理。因此,我写了一个文章集合,供大家参考,整篇文章已经整理成册(如下图所示)。由于文档获取人数太多,大家如有需求,请关注公众号:【数据分析与统计学之美】,回复关键词:【自动化文档】!
用户7886150
2021/01/24
1.9K0
python读取word详解【from docx import Document】
python读取word详解【from docx import Document】
红目香薰
2022/11/30
1.8K0
python读取word详解【from docx import Document】
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
幸运的是,有 Python 模块可以让您轻松地与 PDF 和 Word 文档进行交互。本章将介绍两个这样的模块:PyPDF2 和 Python-Docx。
ApacheCN_飞龙
2023/04/04
3.7K0
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
实用干货:7个实例教你从PDF、Word和网页中提取数据
导读:本文的目标是介绍一些Python库,帮助你从类似于PDF和Word DOCX 这样的二进制文件中提取数据。我们也将了解和学习如何从网络信息源(web feeds)(如RSS)中获取数据,以及利用一个库帮助解析HTML文本并从文档中提取原始文本。
IT阅读排行榜
2019/03/11
5.4K0
实用干货:7个实例教你从PDF、Word和网页中提取数据
用Python操控Word
4月底,我带着自己水的一篇文章,从深圳奔赴美帝西雅图参加了一个制药行业软件用户组2018年年会(PharmaSUG 2018)。听了一些报告,收获不少。在众多报告中,有一篇题目为Why SAS Programmers Should Learn Python Too的报告有点意思。不过在我看来,文章中的例子并没有很好地体现出Python的强大,因为那几个例子用Linux Shell脚本实现也很简单。不可否认,如果你想选择一种语言来入门编程,那么Python绝对是首选!但是对于SAS程序猿/媛来说,我觉得现阶段没有太多必要去学Python,因为行业的原因,Python对SAS程序猿/媛日常的编程工作几乎没有什么用。除非你和我一样,喜欢折腾代码,或者你想转行业做深度码农,那Python是必须掌握的语言,因为Python有各种强大的库。下面就让我们来感受下python-docx库的强大之处吧!
专业余码农
2020/07/15
6210
Word 神器 python-docx
前两天有个朋友向我求助,她在写毕业论文时,不小心将论文里的中文双引号替换为英文的了,各种原因导致无法回退,8万多字的论文,眼看就要交了,该怎么办?
纯洁的微笑
2020/04/01
2.8K0
Word 神器 python-docx
使用Sqlite3+Express.js+React实现在线答题(上)
将word格式的题库转为txt格式,导入至sqlite3中,使用Express.js做服务端提供json格式数据,使用React做前端获取服务端数据。本文为第一部分,实现导入数据和服务端提供数据API接口。
fanzhh
2019/08/20
2.3K0
使用Sqlite3+Express.js+React实现在线答题(上)
python re库-----学习(正则
#!/usr/bin/env python #-*- coding:UTF-8 -*- ##################################################### # Author: sunfx   xingrhce@163.com # Last modified:  2014/11/18 # Filename:  re.py # Q  Q  群:  236147801 #####################################################
py3study
2020/01/08
1.1K0
readability-lxml 源码解析(三):`readability.py`
ApacheCN_飞龙
2023/10/13
2450
python自动化高效办公第二期,带你项目实战【一】{excel数据处理、批量化生成word模板、pdf和ppt等自动化操作}
我们在读取文件的时候,excel的列是字母我们不容易直观看出来是第几列,下面对excel进行设置。
汀丶人工智能
2022/12/21
2.9K0
python自动化高效办公第二期,带你项目实战【一】{excel数据处理、批量化生成word模板、pdf和ppt等自动化操作}
利用大模型服务一线小哥的探索与实践
提升小哥作业效率,就需要了解小哥日常工作中有哪些作业动作,然后根据作业动作的特点,来分析大模型有什么样的机会来实现效率提升。通过调研和分析,小哥有143项作业动作,可分类为:揽收、派送、站内、辅助、客户服务五大类,其中22项动作是系统外的线下动作,其他动作中有69项被认为有大模型结合的机会。在69项中我们选取了小哥揽收信息录入、外呼、发短信、查询运单信息、聚合查询、知识问答、精准提示等场景,通过大模型与大数据、GIS、语音等技术的结合,为小哥提供高效、易用的作业工具。
京东技术
2024/07/04
1430
利用大模型服务一线小哥的探索与实践
Python 使用xlsxwriter绘制Excel表格
最近在统计资产,正好看到了xlsxwriter这个表格生成模块,借此机会,熟悉一下,写点有趣的小案例,一开始想使用C++ QT图形化开发一套自动化运维平台,但后来发现不仅消耗时间而且需要解决QT Qssh远程模块的一些问题,后来没有使用QT做,xlsxwriter模块来做非常的简单,所以使用它。
微软技术分享
2022/12/28
2.5K0
Python 使用xlsxwriter绘制Excel表格
datax(5):改造升级-自动识别py环境,执行datax任务
文件位置: xx\DataX\core\src\main\assembly\package.xml 。 该文件主要功能是‘拷贝’源代码中的脚本到target,实现打包的功能。package.xml 文件被 xx\DataX\core\pom.xml引用;
全栈程序员站长
2022/08/29
2K0
datax(5):改造升级-自动识别py环境,执行datax任务
Android Tombstone 分析
Tombstone是指在分布式系统中用于标记数据已被删除的记录,通常包含删除操作的时间戳和相关信息。
天天Lotay
2024/03/03
1.4K0
Android Tombstone 分析
Python 自动化指南(繁琐工作自动化)第二版:附录 C:练习题的答案
当谈到实践项目时,没有一个正确的程序。只要你的程序执行了项目所要求的,你就可以认为它是正确的。然而,如果你想看已完成项目的例子,可以在的“下载书中使用的文件”链接中找到。
ApacheCN_飞龙
2023/04/04
9910
使用Python和SQLite构建软考评估系统
在计算机科学教育领域,评估自己的知识水平至关重要。无论是学生提升技能还是专业人士保持与最新趋势同步,拥有一个强大的系统来评估和增强知识都是非常重要的。在本文中,我们将深入探讨如何使用Python和SQLite构建计算机科学知识评估系统。
菜菜有点菜
2024/06/10
1510
使用Python和SQLite构建软考评估系统
Python 中的正则表达式全部用法速查
正则表达式可以拼接,如果A和B都是正则表达式,那么 AB也是正则表达式.如果字符串p匹配A并且另一个字符串q匹配B, 那么pq可以匹配 AB.这就构成了由简单构建复杂的基础.除非:
用户7886150
2020/12/23
1.2K0
推荐阅读
相关推荐
盘点一个Python自动化办公的实战案例(word文件处理)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验