下图为一个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相关推荐

  1. python 文本转excel_Python 文本(txt) 转换成 EXCEL(xls)

    #!/bin/env python # -*- encoding: utf-8 -*- #------------------------------------------------------- ...

  2. python学习之word文档转换成pdf文档

    平时办公的时候总有word文档转换pdf的操作,关键wps等转换工具都还是收费的.这里利用python代码把多个word文档转换合并成pdf文档的实现.代码运行需要几个必要库,没有下载安装的小伙伴可以 ...

  3. PDF怎么转换成Excel?用迅读PDF转换器,高效又精准

    PDF怎么转换成Excel?相信很多小伙伴都没有接触过,因为相比于PDF转换PPT.PDF转换Word,PDF转换成Excel确实不常用.当然,如果经常与数据打交道,掌握PDF转化Excel是不可避免 ...

  4. python 替换word内容 doc转换成docx

    python 替换word内容 doc转换成docx doc转换成docx 北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河 ...

  5. python将英文单词表示的数字转换成阿拉伯数字的代码

    下边内容内容是关于python将英文单词表示的数字转换成阿拉伯数字的内容. import re _known = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3 ...

  6. python 数字转化excel行列_Python 3 实现数字转换成Excel列名(10进制到26进制的转换函数)...

    背景: 最近在看一些Python爬虫的相关知识,讲爬取的一些数据写入到Excel表中,当时当列的数目不确定的情况下,如何通过遍历的方式讲爬取的数据写入到Excel中. 开发环境: Python 3  ...

  7. Word/WPS 文本转换成表格

    Word 文本转换成表格 WPS Word 将文本转换成表格 将表格转换成文本 参考资料 WPS 使用WPS Office打开文档,在文字内容间用统一的标记或符号分隔开. (这里使用英文逗号分开) 选 ...

  8. 如何批量将word转换成excel表格

    平时我们工作总会接触很多的文档,转换文档格式也总是很多文件一起,不借助第三方工具的话只能一个个手动转换,非常浪费时间,为了解救大家,小编在这里分享可以批量转换的方法. 转换前的准备:批量将word转换 ...

  9. 如何将WORD转换成EXCEL

    办公中经常会遇到将WORD转换为EXCEL的时候,因为WORD文档毕竟是处理文字的软件,在表格数据处理上与EXCEL表格的功能差的要太多,那么问题来了如何将WORD转换为EXCEL表格呢? 操作工具: ...

  10. 如何将word转换成excel表格格式

    word文档可以直接编辑.复制粘贴等.所以当我们要将word转换成excel格式时,首先想到的就是复制粘贴,但是后面你会发现这样的效果并不好,还需要自己重新调整格式,下面小编给大家介绍一种方法,可以直 ...

最新文章

  1. TCP/IP协议(三次握手)
  2. Python入门100题 | 第018题
  3. 安卓工程版本控制哪些文件可以忽略
  4. views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...
  5. 【windows10 计划任务】【实施工程师】
  6. ES6基础5(Promise)-学习笔记
  7. js 序列化内置对象_内置序列化技术
  8. paper 35 :交叉验证(CrossValidation)方法思想
  9. Maven生命周期详解及常用命令
  10. delphi代码在linux编译运行,[教程] Delphi 10.2 Linux 程序开发环境部署的基本步骤
  11. Seaborn 绘图中设置字体及大小
  12. 网站建设经验分享:如何设计及运营网站
  13. 几何平均数和调和平均数是什么?有什么作用?详细资料讨论他们的区别
  14. 明翰英语教学系列之句法篇V0.6(持续更新)
  15. 《Struts2 In Action》摘录
  16. 一文让你秒懂存储虚拟化
  17. c语言打印一个字母圣诞树,C语言打印圣诞树
  18. 数据库中minus的用法
  19. 西游记中孙悟空所尊敬的神佛
  20. Centos8、Centos7解决Ens33网卡不显示IP地址的问题。

热门文章

  1. 如何从零开始搭建公司自动化测试框架?
  2. 打印机经常遇到的一些问题
  3. 第四篇--关于device
  4. 刷机入门 手把手教程
  5. Lattice PCIe 学习 1
  6. 梦三国测试服显示连接服务器失败,我的登陆进去以后说与服务器失去连接怎么回事...
  7. 投票 java_Java基础之简单投票程序
  8. [OneNote同步失败记录]OneNote 当前无法同步笔记。将继续尝试。
  9. 计算机技术对股市的影响,cpi上涨对股市影响有哪些?CPI如何影响股市涨跌
  10. linux机顶盒界面,基于嵌入式Linux的IPTV机顶盒的设计与实现