复习题文本处理

前言:
快考试了,老师发布了复习题。
问题来了,复习题上面已经有答案了,复习的时候需要用手遮住答案才能检验自己是不是会了。
能不能用我们学过的编程知识来把这些题目括号中的正确选项去掉?经过我几个小时不停调式,试了很多方法,最终成功!

第一次失败的思路:
1.将导入的文本转换成列表
2.使用for循环,将每一个元素进行正则匹配。
3.将每一个匹配到的元素的下标,重新在列表里面赋值
4.写入文件

由于不知名的原因,原文本没有发生改变。
然后重新规划,调整思路。

一、导入文本

首先第1步要分析的是,如何导入文本。
由于本次我要处理的文件格式为docx也就是word文档。
我们只需要把文件后缀名更改为txt即可,但是非常要注意的一点的就是一定要另存为选择encoding=utf-8的格式存储,否则会引发格式问题,从而无法导入本文。这里呢,手机跟电脑是不一样的,手机直接改word文档的后缀为txt,它的文件编码格式为gbk,但是如果是电脑的则会发生乱码,在电脑上更改的时候要注意。

在写代码的时候也一定要注意文件的编码,文件是什么编码,对应导入时也应写相同编码。

with open('/storage/emulated/0/AlivcData/log/text.txt',encoding='gbk')as file:
    data=file.read()

二、使用正则表达式
第2步的思路就是排除掉选项开头的ABCDEF,因为我们要去掉的是括号里面的abcdef
写代码的时候,首先要将读出来的文本转换成列表,以换行来分割。

items=data.split('\n')
string=[]
for i in items:    
    r=re.search('^[A-E]',i)    
    if r !=None:    	
    pass    	
    #print(r.group(0))

三、使用replace()函数删除 正选

由于replace函数操作之后,原始字符串是不发生改变的,所以我们要新建一个变量,又因为我们这个函数是使用在for循环里面,所以我们在循环外部定义一个空的列表,用于接收我们replace函数操作之后的值。

string.append(i.replace('A','').replace('B','').replace('C','').replace('D','').replace('E','').replace('F','').replace(',','').replace('V','').replace('x','').replace('×','').replace('√',''))

全部代码:

import re
with open('/storage/emulated/0/AlivcData/log/text.txt',encoding='gbk')as file:	data=file.read()
items=data.split('\n')
string=[]
for i in items:    
    r=re.search('^[A-E]',i)    
    if r !=None:    	
    pass    	
    #print(r.group(0))    
    else:
        string.append(i.replace('A','').replace('B','').replace('C','').replace('D','').replace('E','').replace('F','').replace(',','').replace('V','').replace('x','').replace('×','').replace('√',''))
for i in string:	
    print(i)

总结:因为是在手机上面写的代码,花了很长时间,整体上非常考验字符处理的能力,考验逻辑思维,还有基础语法知识。

选择题去掉答案的效果:
在这里插入图片描述
判断题去掉答案的效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_17802895/article/details/111315631
今日推荐