python应用——把word问卷对应转换成excel
下图为一个word格式的问卷文档,想要把它的题型题目和选项对应转换为excel。
想要得到的excel如下图所示:
1、首先需要导入一些相关的模块。
python里面处理word需要安装docx模块,运用正则表达式进行匹配需要re模块,插入有序字典需要OrderedDict。
#导入后续需要的库
from docx import Document#处理word文档,Document对象,表示一个word文档。
#需要注意,python-docx模块安装需要在cmd命令行中输入pip install python-docx
from collections import OrderedDict #OrderedDict按照有序插入顺序存储的有序字典。
import re
#re模块称为正则表达式;创建一个"规则表达式",用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等;
import pandas as pd
2、导入word文件
#读取文件
file = Document(r"D:\A USTC\CSDN\问卷10.19.docx")
#word文档需要为docx格式,不能是word2003,否则会报错
3、了解一些相关信息
#查看一下段落数
print('段落:'+str(len(file.paragraphs)))
#看一下段落对应内容
for i, paragraph in enumerate(file.paragraphs[:78]):print(i, paragraph.text)
4、寻找题型规律,进行匹配
正则表达式匹配是后续进行转换的重要部分,对于不同的问卷只需要用不同的元字符进行匹配即可适用各种问卷。(注意一个问题,python导入后对word自动编码的“一、二"这类不能识别,需要word取消自动编号用单纯符号,或者修改正则表达式匹配方式)
如下图,若“一、”为自动编码,则读取后只有正规金融
进行匹配的代码如下:
#整理题型规律并且匹配
tixing= re.compile("[一二三四]+\S+")#题型以大写数字开头 #匹配[]中列举的字符timu= re.compile("\d+[.]+")#题目以普通数字+.开头 #\d匹配数字xuanxiang = re.compile("[①②③④⑤⑥⑦⑧⑨⑩]+[\d\W\u4e00-\u9fa5]+")#选项以①②③④⑤⑥⑦⑧⑨⑩开头 #\d匹配数字\W匹配特殊字符\u4e00-\u9fa5匹配中文qita = re.compile("\s+") #\s匹配任意空白字符
python常用元字符介绍参考文章:https://blog.csdn.net/qq_33210042/article/details/116953989
5、遍历文档并根据匹配结果整理
#从word“一.”开始遍历,4-77段
for paragraph in file.paragraphs[4:77]:#去掉空白字符line = qita.sub("", paragraph.text)#sub(replacement, string[, count=0])replacement是被替换成的文本,string是需要被替换的文本,count是一个可选参数,指最大被替换的数量if not line:#如果line为空,跳过后续continueif timu.match(line):
#timu.match() 从开始位置开始往后查找,返回第一个符合规则的对象,如果开始位置不符合匹配队形则返回None,所以寻找到匹配项时才会打印结果,下面类似。print("题目", line)elif xuanxiang.match(line):print("选项",line)elif tixing.match(line):print("题型", line)
6、结构化写入字典
#结构化为字典
question= OrderedDict() # 按照有序插入顺序存储的有序字典。
for paragraph in file.paragraphs[4:77]:line = qita.sub("", paragraph.text)if not line:continueif timu.match(line): options = title.setdefault(line, [])#setdefault() 函数添加键并将值设为默认值。elif xuanxiang.match(line):options.extend(xuanxiang.findall(line))
#findall()将所有匹配到的字符,以列表的形式返回,用extend加入到字典elif tixing.match(line):tixing_match=tixing.match(line)question_type = tixing_match.group()title = question.setdefault(question_type, OrderedDict())
7、保存到pandas对象
#遍历并把数据保存到pandas对象
result = []
for question_type, title in question.items():for title, options in title.items():result.append([question_type, title, *options])options_len = len(options)
df = pd.DataFrame(result, columns=["题型", "题目"]+[f"选项{i}"for i in range(1, 11)])
df
结果如下图所示:
8、写入excel,最终得到开始的excel所示结果
df.to_excel(r'D:\A USTC\CSDN\问卷结果.xlsx', sheet_name='Sheet1', index=False, header=True)
参考文章:http://t.zoukankan.com/hhh188764-p-14282973.html
python应用——把word问卷对应转换成excel相关推荐
- python 文本转excel_Python 文本(txt) 转换成 EXCEL(xls)
#!/bin/env python # -*- encoding: utf-8 -*- #------------------------------------------------------- ...
- python学习之word文档转换成pdf文档
平时办公的时候总有word文档转换pdf的操作,关键wps等转换工具都还是收费的.这里利用python代码把多个word文档转换合并成pdf文档的实现.代码运行需要几个必要库,没有下载安装的小伙伴可以 ...
- PDF怎么转换成Excel?用迅读PDF转换器,高效又精准
PDF怎么转换成Excel?相信很多小伙伴都没有接触过,因为相比于PDF转换PPT.PDF转换Word,PDF转换成Excel确实不常用.当然,如果经常与数据打交道,掌握PDF转化Excel是不可避免 ...
- python 替换word内容 doc转换成docx
python 替换word内容 doc转换成docx doc转换成docx 北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河 ...
- python将英文单词表示的数字转换成阿拉伯数字的代码
下边内容内容是关于python将英文单词表示的数字转换成阿拉伯数字的内容. import re _known = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3 ...
- python 数字转化excel行列_Python 3 实现数字转换成Excel列名(10进制到26进制的转换函数)...
背景: 最近在看一些Python爬虫的相关知识,讲爬取的一些数据写入到Excel表中,当时当列的数目不确定的情况下,如何通过遍历的方式讲爬取的数据写入到Excel中. 开发环境: Python 3 ...
- Word/WPS 文本转换成表格
Word 文本转换成表格 WPS Word 将文本转换成表格 将表格转换成文本 参考资料 WPS 使用WPS Office打开文档,在文字内容间用统一的标记或符号分隔开. (这里使用英文逗号分开) 选 ...
- 如何批量将word转换成excel表格
平时我们工作总会接触很多的文档,转换文档格式也总是很多文件一起,不借助第三方工具的话只能一个个手动转换,非常浪费时间,为了解救大家,小编在这里分享可以批量转换的方法. 转换前的准备:批量将word转换 ...
- 如何将WORD转换成EXCEL
办公中经常会遇到将WORD转换为EXCEL的时候,因为WORD文档毕竟是处理文字的软件,在表格数据处理上与EXCEL表格的功能差的要太多,那么问题来了如何将WORD转换为EXCEL表格呢? 操作工具: ...
- 如何将word转换成excel表格格式
word文档可以直接编辑.复制粘贴等.所以当我们要将word转换成excel格式时,首先想到的就是复制粘贴,但是后面你会发现这样的效果并不好,还需要自己重新调整格式,下面小编给大家介绍一种方法,可以直 ...
最新文章
- TCP/IP协议(三次握手)
- Python入门100题 | 第018题
- 安卓工程版本控制哪些文件可以忽略
- views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...
- 【windows10 计划任务】【实施工程师】
- ES6基础5(Promise)-学习笔记
- js 序列化内置对象_内置序列化技术
- paper 35 :交叉验证(CrossValidation)方法思想
- Maven生命周期详解及常用命令
- delphi代码在linux编译运行,[教程] Delphi 10.2 Linux 程序开发环境部署的基本步骤
- Seaborn 绘图中设置字体及大小
- 网站建设经验分享:如何设计及运营网站
- 几何平均数和调和平均数是什么?有什么作用?详细资料讨论他们的区别
- 明翰英语教学系列之句法篇V0.6(持续更新)
- 《Struts2 In Action》摘录
- 一文让你秒懂存储虚拟化
- c语言打印一个字母圣诞树,C语言打印圣诞树
- 数据库中minus的用法
- 西游记中孙悟空所尊敬的神佛
- Centos8、Centos7解决Ens33网卡不显示IP地址的问题。
热门文章
- 如何从零开始搭建公司自动化测试框架?
- 打印机经常遇到的一些问题
- 第四篇--关于device
- 刷机入门 手把手教程
- Lattice PCIe 学习 1
- 梦三国测试服显示连接服务器失败,我的登陆进去以后说与服务器失去连接怎么回事...
- 投票 java_Java基础之简单投票程序
- [OneNote同步失败记录]OneNote 当前无法同步笔记。将继续尝试。
- 计算机技术对股市的影响,cpi上涨对股市影响有哪些?CPI如何影响股市涨跌
- linux机顶盒界面,基于嵌入式Linux的IPTV机顶盒的设计与实现