前言

亲人工作考试,公司给的题库好像是直接从数据库导出的表格Excel形式,在移动端上非常难看,需要不断左右上下滑动,看不了多少题眼就瞎了,遂主动请缨编写python脚本解决之。
原本给的题库在手机上横屏显示是这样的↓↓↓(想象一下是在手机上)无比恶心

我的工作

公司给出的格式是.xlsx的(Excel表格的默认格式),盲猜是直接从答题数据库导出的,表名和属性名应该是稍微做了从英文到中文的改变,然后,就直接这样发给员工了…
表格有八个,放在一个文件夹下,由于不同工种的题表头是相同的,因此可以编写代码统一处理。
首先是获取题库存放路径,便于对指定路径文件处理:

to_path = r'D:\python_project\TableAfterProcessing'
dir_path = r'D:\python_project\题库名\backup'
name_list = []
for i in os.listdir(dir_path):name_list.append(i)

之前学过python库pandas的基本操作,由于一个月前数模美赛的时候使用过并使用博客记录,因此总体来说还不算生疏。
关于Excel表格的读取,作者首先手动将表格转换成了.csv格式(表格不多,因此没必要编写代码了,当然,如果愿意还是可以的)。
观察到表格中知识点一栏数据完全相同,选项个数一栏并没有什么参考价值,因此去掉这两行,只保留题型,题干,选项,答案。

然后就是采用pandas将缺失值null变为空字符串’ ',这样的目的是避免将null这个字符写入到word。

for file_name in name_list:# 文件读取路径from_path = os.path.join(dir_path, file_name)p_data = pd.read_csv(from_path, engine='python', usecols=['题型', '题干', '选项', '答案'])p_data = p_data.where(p_data.notnull(), '')

经过对数据的处理后预处理后,表格便只剩下了四列数据,清爽了很多。
然而光是这样还是不够的,毕竟涉及到手机端浏览表格就得放大,滑动,一不小心点到格子里去还要点出来,对用户很不友好。
因此,我决定将表格数据导入到word,变成常见的题型格式。
这就需要用到python的docx库,关于这个库的讲解就不在这里赘述了,笔者也是通过百度新学习的,这里主要说一下设计和逻辑。

1.题型归类
题型分为单选题,多选题,判断题。表格中对于每一个题都有其对应的类型描述,无外这三种。同时,同一类的数据是聚集在一起的,因此,可以设置标志位记录前一个题目所属的题型,如果当前类别和上一个相同,则只需要写入题号题干等;如果不同,就使用docx中的Document.add_heading()方法新建立一个标题。

2.正确答案标红
如果单纯的将答案写在每一个题的后面或者开头,这样固然可以,但显然不够直观。一种友好的方式是将正确答案标为红色,这样便能直观的看出。
如何实现呢?
原本表格中的答案是以’ABC’这样的方式给出的,python中自带关键字in可以用来判断A串是否连续存在于B中,例如'as' in 'asda',返回值是True,而'sa' in 'asda'返回值则是False
故而拿到了选项后,只需要使用str.split()方法切分字符串,再依次判断每个字符串的首个字符是否存在于正确答案字符串中就可以了。
拿这组数据举例:

给定选项有:A.劳动生产率  B.产品质量   C.产量   D.工作质量
因此切分后的字符串列表是这样的['A.劳动生产率', 'B.产品质量', 'C.产量',' D.工作质量']
正确答案字符串为'A,B,D'
取其中第一个字符串'A.劳动生产率',首个字符为'A',A存在于’A,B,D’中,证明这条答案是正确的,因此调用docx库自带的方法将字符串写入到word并标记为红色。

# 若为判断题则将答案写入
if q_type == '判断题':document.add_paragraph(u'答案:' + str(r_ans) + '\n')
# 否则只标红正确选项
else:res_list = (str(r_choose)).split()# print(res_list)p.add_run('\n')for res in res_list:run = p.add_run(str(res) + ' ')# print(res[0])if res[0] in r_ans:run.font.color.rgb = RGBColor(255,0,0)p.add_run('\n')

经过我一通操作后变成了这样↓↓↓
单选题

多选题

判断题

代码

这里放上整个代码,若有需要的同学可以作为参考。

# *-* encoding:utf-8 *-*
import os
import pandas as pd
from docx import Document
from docx.oxml.ns import qn
from docx.shared import RGBColorto_path = r'D:\python_project\TableAfterProcessing'
dir_path = r'D:\python_project\XXXX\backup'
name_list = []
for i in os.listdir(dir_path):name_list.append(i)print(name_list)
# ['D:\\python_project\\XXX考试题库\\backup\\ssss.csv']for file_name in name_list:# 文件读取路径from_path = os.path.join(dir_path, file_name)# 创建文档对象,设置字体document = Document()document.styles['Normal'].font.name = u'宋体'document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')print((file_name))p_data = pd.read_csv(from_path, engine='python', usecols=['题型', '题干', '选项', '答案'])p_data = p_data.where(p_data.notnull(), '')# 读取指定几列q_type = ''for index in range(len(p_data)):r_type = p_data['题型'][index]r_cont = p_data['题干'][index]r_choose = p_data['选项'][index]r_ans = p_data['答案'][index]# print(str(r_choose))# 判断当前题型,确定是否创建对应类别标题if r_type is not q_type:q_type = r_typedocument.add_heading(q_type)# 将题号以及题干写入文档p = document.add_paragraph(str(index+1) + r'.' + str(r_cont))# 写入选项# if str(r_choose).strip() is not '':#     document.add_paragraph(str(r_choose))# 若为判断题则将答案写入if q_type == '判断题':document.add_paragraph(u'答案:' + str(r_ans) + '\n')# 否则只标红正确选项else:res_list = (str(r_choose)).split()# print(res_list)p.add_run('\n')for res in res_list:run = p.add_run(str(res) + ' ')# print(res[0])if res[0] in r_ans:run.font.color.rgb = RGBColor(255,0,0)p.add_run('\n')# p.add_run('')# 切分答案字符串# pass# 写入对应路径document.save(os.path.join(to_path, file_name[0:-4]+'.docx'))

使用python处理题库表格并转化为word形式相关推荐

  1. python编程题-python编程题库

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案:? 本期 ...

  2. python程序设计题库-python编程题库

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案 ...

  3. python 入门题库————python语句和基础数理

    python 入门题库 python 题库 Python使用符号_______表示注释 Python不支持的数据类型有 查看python版本的命令是 在Python中,print(type(16/4) ...

  4. 全国计算机等级考试二级Python精品题库学习笔记1

    全国计算机等级考试二级Python精品题库学习笔记1 精品试卷01 精品试卷01程序题 基本操作题 2:随机验证码 基本操作题 3:比赛成绩计算 Turtle 绘图题:同心圆 简单应用题 2:员工工资 ...

  5. 大学python选择题题库及答案_大学慕课用Python玩转数据题库及答案

    大学慕课用Python玩转数据题库及答案 更多相关问题 (19分)电解原理在化学工业中有广泛应用.右图表示一个电解池,装有电解液c :A.B是两块电极板,通过导线与直流 用铂电极电解CuCl2与CuS ...

  6. python制作题库网站_Python解答力扣网站题库简单版!

    1041. 困于环中的机器人 题库链接: 1041. 困于环中的机器人 . 题干 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方.机器人可以接受下列三条指令之一: "G" ...

  7. Python程序设计题库——第二章

    Python程序设计-第二章 一.选择题 1. Python 3.x 版本的保留字总数是( ) A. 27 B. 29 C. 33 D. 16 答案: C 2. 以下选项中,不是 Python 语言保 ...

  8. python建立题库随机抽题,用Python读取Excel题库随机组成Word版本试卷

    Excel题目类型有单选.多选.判断,其中多选题最多包含6个选项,判断题只有两个选项(A:正确,B:错误) 此程序将随机抽取单选题20题,多选题10题,判断题20题,组成一张试卷. 运行程序后,将得到 ...

  9. python 从题库excel中读取需要的属性生成json,然后爬取问卷星比对出答案

    1.excel文件 https://download.csdn.net/download/qq_42972591/74125316 import pandas as pd import re impo ...

最新文章

  1. java中字符与字节的编码关系
  2. WaitForMultipleObjects用法详解
  3. python电脑发音-Python如何实现文本转语音
  4. 当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...
  5. 【Leetcode1365】有多少小于当前数字的数字:详解
  6. 采用Spring管理Bean和依赖注入
  7. Spark逻辑图的执行
  8. oracle 查看远程用户,oracle sysdba用户远程登录
  9. 大数据创业的门槛到底有哪些?
  10. matlab papr,PAPR问题的MATLAB程序
  11. 利用Python进行数据分析的学习笔记——chap12
  12. 3d模型计算机教室,大学教室3d模型
  13. C#--解析DataMatrix二维码
  14. java将英文字符(无论大小写)转化为小写
  15. perl linux yum,Linux CentOS6.5(x86_64)安装Perl5.26
  16. 【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用
  17. 小白一键系统重装系统GHO文件如何下载教程
  18. 每次访问某个界面,展示欢迎回来,并展示上次访问时间
  19. 计算机网络可靠传输是什么意思,可靠传输
  20. 微信美食菜谱小程序系统毕业设计毕设(5)任务书

热门文章

  1. Angular:This is probably not a problem with npm,There is likely additional logging output above.报错
  2. 系统重装后OA服务器,华为服务器重装系统
  3. c语言结构体知识总结
  4. vue 生命周期 返回不触发_Vue生命周期小结
  5. 【ABAP】-第七堂课-SMARTFORMS打印
  6. 二级建造师考试的难易程度怎么样?
  7. sorl的全量更新与增量更新
  8. 码蹄集 tourist
  9. 个人记账app(一)需求设计
  10. xilinx vivado 百度云 vitis vivado 2019.2 2019.1 2018.3 2018.2 2017.4 2017.4 2017.1 2016.2 2015.4及licens