Python是怎样生成毛概题库的?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_38682860/article/details/88599995

1. 思路

要生成题库,我们首先观察一下题库的样子

img

通过观察,筛选出我们需要的信息,这里我们只需要题目类型,题干,正确答案,选项数,选项内容这几项。

所以大致提取过程是这样的:

  1. 读取excel文件获取题库
  2. 格式化题库(让题目变成可以处理)
  3. 按照一定格式写入word文件
  4. 更多Python视频、源码、资料加群984632579免费获取

2. 需要的库

人生苦短,我用Python。Python之所以简单,不只是英文它简单的语法,而且还有大量的第三方库可以使用。
原来题库是excel文件,Python当然有读取excel的库 xlrd,
在写入word文件时候,需要安装python-docx

3. 定义题目分类

通过看题库文件,发现题目分为5种类型:

单选题, 多选题, 填空题,判断题,简答题

所以我们预先定义好,用数字表示,这样之后处理方便很多。

img

4. 获取所有题库的文件目录

因为题库分为好多章节,每个章节都是单独一个excel文件,我把它们放到一个指定的文件夹下:

img

接下来指定所有题库的目录,获取所有的题库文件。另外我这里使用sorted排序,保证按照章节顺序读取。排序是依据每个章节文件前的数字排序,即指定排序的key值为数字,获取章节的key的函数是get_key(),通过正则表达式将章节文件的前面的数字读取出来。
这样xl_list即为所有输入文件的路径。如下图:

img然后就可以使用xlrd愉快的读取了

img

5. 定义问题类

在读取之前我这里先定义一个问题类,读取到信息在类中处理。这样有利于代码的封装,之后如果有要修改的也比较方便。这里主要做的是根据题目类型保存正确答案。

比如判断题给出的答案是A或B(对与错),这样不方便阅读,把他变成正确或者错误就会好点(choose里面存放就是正确和错误)。

以及就是简单题没有选项,而传入参数chooses的第一个元素为答案,所系我们直接把答案设置为选项的第一个元素,并且不设置答案(' '.join(chooses)是将数组用空格连接起来)。

代码如下:

img

6. 格式化读取题库

下面就是正式读取题库了,代码如下图。通过xlrd依次打开每个章节的题库excel文件。在一个excel文件中,有多个 sheet 组成。每一个sheet就可以抽象成一个二维数组,知道要读取的数组的坐标在哪,就可以读取了。在读取文件中只有一个sheet, 我们就选取第一个(程序员的第一个下标是0)。 读取x,y单元格的api为cell(x, y),读取完成后是一个sheet对象,再使用value获取实际的值。

读取excel一行即为一道题,我们就生成一个quesion对象,然后把它存放到一个这个章节全部题目的列表中。

当读取完一个章节的文件后,我们按照文件的类型排序(还记得之前用数字表示下标么?,这样排序简单点)。再将该章节的所有习题列表以文件名为key放入一个字典中。

img我们可以看下all_result中的内容

img

7. 生成word文件

代码在如下图,不要觉得很长,注释就占了一半啦。拆开看就是写入doc,首先写入标题,接下来依次写入题目的标题,然后判断题目的类型,依次写入。这里我们使用传入参数with_ans判断是否显示答案,choose_end来控制选项结尾的符号,\t为制表符,\n为换行。使用filter来控制要输出的题目类型。默认全都显示,但是如果有些题我们不想显示的话,那么传入的时候就指定自己想要输出的题目类型。

img

下面的代码就是依次将处理好的题库字典文件生word格式文档。在最后并且保存好文件。

img通过gen_doc指定的参数我们就可以控制生成的文档内容

猜你喜欢

转载自blog.csdn.net/sinat_38682860/article/details/88599995