Python Office办公自动化:将excel题库导入App的TXT格式

用python将excel题库导入app用的TXT格式

一、转换需求的产生

上级发了一份excel题库进行抽考。为了方便刷题,将它转录进手机用的考试酷app。在移动端用app复习比用电脑复习方便多了。

题目数量比较多,因此考虑用python将其生成app题库录入工具需要的格式txt。

首先excel的题库是长这样子的

转成TxT样式是这样子

每题格式为:

1、序号为数字+英文逗号

2、列出问题

3、选项是大写英文字母+英文逗号开头。每个选项是单独一行的。

4、参考答案是冒号加内容。

其实并不复杂。主要涉及excel读取和写入TXT文档

并且需要处理一下题库本省杂乱的格式。

1、选项是大写英文字母+英文逗号开头,每个选项是单独一行的。而题库里所有的选项都挤成一行,需要处理一下。并且句号有中英文夹杂,必须得统一成英文的句号。

因为有好几百道题目,一个个复制来复制去很累。

二、Excel读取

因为涉及excel读取,在这里使用openpyxl模块。

1、导入openpyxl模块

import openpyxl

2、读取excel文件.xlsx。即表格簿。

wb=openpyxl.load_workbook('tiku.xlsx')

用load_workbook读取excel文件。

3、读取excel里标签页。

sheet=wb.get_sheet_by_name('多选题(60道)')

4、读取标签页里表格内容,例如读取A1表格的值

Tmp=sheet[‘A1’].value。

三、读取内容

因为题库数量较多,用了个循环读取。If循环。

先建立列表,作为读取出来的内容,循环读取过程中直接用列表的.append函数加到最后。

表格内容读取因为最后写到TXT里,涉及到int 到 str的转换,用str()函数。

四、文字处理及正则表达式

(一)、选项分离;

其中到了选项读取部分,就需要处理选项分行和中英文句号问题了。在这里采用了正则表达式来处理,方便简单。

样例文本如下:

需要变成的格式如下:

1、采用正则表达式,需要导入re模块。

import re

2、建立样例,文字匹配及替换

patter1='([A-E]).'

tmp=re.sub(patter1,'\\1.', tmp)

将选项里A.变为A.。注意中英文句号.的宽度。其中用了\1这个组,可以将匹配到的组复制会新的文本里。

并且注意在这里我用的是\\1,用了转移符\,将\1变成组1。

想理解并练习正则表达式替换效果的话,请访问https://regexr.com/,记得勾选右上角PCRE选项(Perl兼容正则表达式)才能使用\1。

3、将ABCDE自动换行,在字母前加入换行符\n。

patter2='([B-E]).'#将选项B.到E.自动换行

newstr=re.sub(patter2, '\n\\1.', tmp)

4、与别的字符处理语句对比

本来开始时候打算用以下语句进行换行,对比了一下太丑陋了。还是正则表达式简洁。

(二)、格式整理,删空行和段前段后空格;

列表生成之后,发现字符串里还有很多空行和分隔符、段前段后空格符等等。需要清理理一下。下面是需要整理的文本字符串样式。

需要整理完成的样式

还是用正则表达式。为了方便以后调用,直接写成函数形式。

1、匹配空行,用pat2=r'^\s$'#空行。开头符号^和结束符$之间只有\n、空格等。注意需要flags=re.M(多行模式)。

注意,因为re默认不是多行模式,使用^$作为每行的开头和结尾需要多行模式,而且必须加上flags明示。因为少写了flags,网上样例都没写这个,让我折腾了大半小时都没成功。后面翻了python原文档后才发现得写。真是坑爹。

2、匹配段前空格。pat3=r'^ '#段前空格,即开头符号^接上空格。注意需要flags=re.M(多行模式)

3、匹配段后空格。pat4=r' $'#段后空格。即空格接上结束符$。注意需要flags=re.M(多行模式)

五、写入txt。

fp=open('单选题题目及答案.txt','w',encoding='utf-8')

因为采用(utf-8编码),需指明,否则会出现错误“'gbk' codec can't encodecharacter”。

fp.writelines(quizs);

因为读取成列表形式,写入文档中,用writelines()函数,如果是用write()函数的话,需要写一个循环写入的。

程序代码部分

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190213F0GIDA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券