Python中怎么将Word文档转换为Excel表格
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,Python中怎么将Word文档转换为Excel表格,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。测试word文档读取先测试一个wo
千家信息网最后更新 2025年02月05日Python中怎么将Word文档转换为Excel表格
Python中怎么将Word文档转换为Excel表格,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
测试word文档读取
先测试一个word文档前1页的数据读取:
from docx import Documentdoc = Document("编号02 质检员高级技师(一级)理论试卷.docx")for i, paragraph in enumerate(doc.paragraphs[:55]): print(i, paragraph.text)
匹配题型、题目和具体的选项
现在我们需要做的是就是匹配题型、题目和具体的选项,观察可以发现规律:
题型以大写数字开头
题目以普通数字+.开头
选项以括号+字母开头
❝
额外需要注意的:
开头几行文本也存在普通数字+.开头的,需要直接排除。
第7题的题目,和第19题的选项存在一些特殊的空白字符需要排除,
括号和小数点都同时存在半角和全角两种情况。
❞
对于需要注意的第二点:
查看一下这2处的空白字符:
doc.paragraphs[21].text
'7.(\xa0\xa0)是第一家实施六西格玛管理的公司。\xa0'
doc.paragraphs[49].text
'(A)参数设计 (B)常量设计\u3000 (C)变量设计\u3000\u3000 (D)系统设计'
发现分别是\xa0和\u3000。
整理好大致思路,我组织一下处理代码:
import refrom docx import Documentdoc = 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("()", "( )") # 对于空白行就直接跳过 ifnot 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))
保存匹配到的数据到结构化字典
现在我打算将当前匹配出来的文本数据存储成字典形式的结构化数据,字典结构的设计如下:
根据上述设计完善代码:
import refrom docx import Documentfrom collections import OrderedDictdoc = 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("()", "( )") # 对于空白行就直接跳过 ifnot 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对象中:
import pandas as pdresult = []max_options_len = 0for 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_lendf = pd.DataFrame(result, columns=[ "题型", "题目"]+[f"选项{i}"for i in range(1, max_options_len+1)])# 题型可以简化下,去掉选择两个字df['题型'] = df['题型'].str.replace("选择", "")df.head()
结果:
最终保存结果:
df.to_excel("result.xlsx", index=False)
完整代码
最终完整代码:
import pandas as pdimport refrom docx import Documentfrom collections import OrderedDictdoc = 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("()", "( )") # 对于空白行就直接跳过 ifnot 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 = 0for 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_lendf = 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)
最终得到的文件:
关于Python中怎么将Word文档转换为Excel表格问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
题型
字符
数据
空白
文档
结构
题目
选择
结构化
设计
字典
开头
括号
高级
代码
半角
技师
理论
试卷
质检员
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
有小程序源码怎样看数据库在
网络技术开发要交印花税吗
泰州大规模分布式存储数据库
通州服务器搬迁报价表
四川省少先队信息数据库
桥西区软件开发计算机培训学校
网络技术应用的弊端
mc怎么进服务器
连接2k sport服务器
2345服务器
广州买买买网络技术
免费服务器推荐
校园网络安全防诈骗方法
数据库数据处理及结果分析
国家网络安全研究院建设思路
投资公司的软件开发项目预算
数据库全局权限
数据库给我们带来了哪些便利
即时通讯软件开发哪里做得
食品软件开发报价
赤峰网络安全大队位置
陕西系统软件开发公司
网络技术科岗位职责
厦门按摩椅软件开发
数据库字符串类型排序
如何解除服务器里被ban的状态
街霸的服务器
读网络安全日是哪一天
冬奥会期间网络安全检查
王者荣耀哪里有服务器终端