docx模块操作Word文档的简单案列 docx文档是word文档吗


docx模块操作Word文档的简单案列 docx文档是word文档吗


前言
前段时间有小伙伴问二狗,怎么把一个 Word文档的题库,写一个 python 脚本提取到 Excel 里 .由于数据全是选择题,且文本很有规律,不是很复杂.所以今天二狗就通过本篇文章来分享下二狗的思路和代码.

docx模块操作Word文档的简单案列 docx文档是word文档吗


word文档数据

docx模块操作Word文档的简单案列 docx文档是word文档吗


提取为 Excel 的格式
编程环境
1.文中电脑操作系统:win10
2.文中所使用的python 模块:
(1).os (python 自带模块,不需要 pip 安装)
(2).re (python 自带模块,不需要 pip 安装)
(3).docx (第三方模块,需要 pip 安装)
安装命令:pip install -i https://
pypi.tuna.tsinghua.edu.cn/simple python-docx
注意:我们这次要用到的第三方库,就是专门为 docx 格式的 word 文档而生的 。如果你手头需要处理的是 doc 格式的 word 文档,你可以打开 word,将其另存为 docx 的格式 。【注意 word 97 以上版本支持存储 docx 文件】
(4).openpyxl (第三方模块,需要 pip 安装)
安装命令:pip install -i https://
pypi.tuna.tsinghua.edu.cn/simple openpyxl
3.文中数据源文件:选择题.docx(如果需要,请后台私信)
4.文中所使用的IDE:VSCODE(安装 Jupyter 插件)
文档数据结构剖析及代码思路

docx模块操作Word文档的简单案列 docx文档是word文档吗


文档结构
(1)提取答案:由于答案是红色标记的,我们可以读取每一段落的样式,红色的段落就是答案.

docx模块操作Word文档的简单案列 docx文档是word文档吗


分题
(2)分题:这个稍微有点复杂,二狗通过处理每一题前面的题号,来进行的,具体详见代码.

docx模块操作Word文档的简单案列 docx文档是word文档吗


一行 2 选项
(3)一行 2 选项:通过 split 来分割,具体详见代码.
代码拆检
import osimport re import docximport openpyxlnow_path = os.getcwd() # 获取当前 ipynb 文件的路径 doc_file = '选择题.docx' # 要提取的 doc 文件名 excel_file = '选择题.xlsx' # 保存为 Excel 的文件名 wb = openpyxl.Workbook() # 实例化 Excel 对象 ws =wb.active # 创建 Excel 活动表格 tab_head = ['序号','题目','选项 1','选项 2','选项 3','选项 4','答案'] #定义 Excel 表头 ws.append(tab_head) #表头写入 Excelstart_flag = True# 设置开始状态 content_list=[] #初始化内容列表def jion_path(file_path,file_name):'''功能:拼接文件路径:param file_path: 固定参数,定义拼接的文件路径:param file_name: 固定参数,定义拼接的文件名称:return:返回拼接好的文件路径'''return os.path.join(file_path,file_name) 这里二狗定义了一个无聊的函数
doc = docx.Document(jion_path(file_path=now_path,file_name=doc_file)).paragraphs# 读取 word 文档.doc 文件 如是.docx 文件 需把文件另存为.doc 文件 读取 docx 文档,得到一个段落列表.

docx模块操作Word文档的简单案列 docx文档是word文档吗


段落列表
for content in filter(lambda x: bool(x.text) ,doc[1:]): #遍历段落列表row = content.text.strip('试题') #去除每一题的'试题'2 字row_list = re.split(r'^\d+\W',row) # 正则切割段落文本 doc[1:] 从第二行开始读取,不读取第一行的大标题
filter(lambda x: bool(x.text) ,doc[1:])这里是过滤为空值的段落.

docx模块操作Word文档的简单案列 docx文档是word文档吗


过滤效果

docx模块操作Word文档的简单案列 docx文档是word文档吗

推荐阅读