python文案处理

本文介绍了一种使用Python处理填空题和选择题答案的方法,包括解析Word文档、提取题目和答案并进行匹配的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求


临近考试,老师大发慈悲,发了考试提纲。但是头疼的是答案和题目分开的。不过没关系,还好我用的是python。
下面只讲最头疼的两个
1. 填空题
2. 选择题

选择题


  • 首先要说明一下:给的word文档 ,而我们只想对其中的文字进行处理 多余的格式跟我们没关系。
  • 要使用程序来处理一个文件的话得找到规律 ,才好用 循环 迭代。
    • 选择题当然就是 题号后最后的() 但是这里的()每一题可能中间空格多有的少,所以我们要把它换成统一的,这个直接借助 word 查找替换(先替换左边的“(”为你想要的特殊字符串 或者就是是“()”只要与题目中不冲突就行,然后把右边“)”的删掉即可
下面分析答案新式
1C 2.B 3C 4D 5D 6.B 7D 8.B 9.A 10C
1.B 2D 3C 4.B 5D 6.B 7.A 8.A 9.A 10D
1D 2.B 3C 4D 5.B 6C 7.A 8.B 9D 10C
1D 2.A 3D 4.A 5.B 6D 7.A 8.A 9D 10.A
1.B 2.A 3D 4C 5D 6C 7.A 8.B 9C 10.A
1.A 2C 3D 4.A 5.A 6D 7.B 8.B 9.A 10D
1.B 2.A 3C 4D 5C 6.B 7.A 8.A 9D 10C
1.B 2C 3.B 4.A 5C 6.B 7D 8.A 9.B 10.B
  • 坑爹啊,就不能好好的按序号排吗。这样就是 11-1 12-2 以此类推。
  • 总结以后就是写代码了
import re

newfile=open(r"I:\整合.txt","a")
opfile=open(r"I:\选择题答案.txt",encoding="ANSI").readlines()
//将答案一行一行读出来  每行10个 分别对应1-10  11-20 21-30....
for top in opfile :
    tresult={lt.split(".")[0][-1]:lt.split(".")[1] for lt in top.rstrip().split("\t")}
//通过选择题的头部 题号  每当 题号中有0 就是对应下一组答案 跳出当前循环
//这里使用 match  避免了题干中也有 12、这样的字眼 可以只取第一个。  
    while 1:
        line =opq.readline();    
        print(line);
        //将 字典中的答案根据当前的题号的最后一个数字(因为答案只有0~9)来替换
        if "(  )" in line:
            newfile.write(line.replace('(  )',"("+ tresult[re.match("([\d]*)、",line).group(1)[-1]]+")"))
            if "0" in re.match("([\d]*)、",line).group(1):

                break;
        else:
            newfile.write(line);
   //添加上末尾呗漏掉的题干
last=opq.readline();
while last  !="":
    newfile.write(last);
    last=opq.readline();

newfile.close();
//这里是吧所有的选择题和答案都放在 放在I:\下面
  • 这样就ok 了。

填空题

同上 就不再赘述直接贴代码

import re
anwsermap={line.rstrip().split('.')[0]:line.rstrip().split('.')[1] for line in open(r"I:\填空题答案.txt",encoding="ANSI").readlines() if  "√" in line or "×" in line }

fileaccount=open(r"I:\填空题答案.txt",encoding="ANSI").readlines()
anatache={line.rstrip().split('.')[0]:fileaccount[fileaccount.index(line)+1] for line in fileaccount if "×" in line}

newfile=open(r"I:\整合.txt","a")
for line in open(r"I:\填空题.txt",encoding="ANSI").readlines():
    print(re.match("([\d]*)、",line).group(1));
    newfile.write(line.replace('(    )',"("+anwsermap[re.match("([\d]*)、",line).group(1)]+")"+ ("\n"+anatache[re.match("([\d]*)、",line).group(1)]) if "×" in anwsermap[re.match("([\d]*)、",line).group(1)] else ""))


newfile.close();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值