当前位置: 首页 > article >正文

使用python 将world的题库导入某学习软件的模板

本python中使用了模块:

re:用于写正则

python-docx:用于读取worl中的数据

openpyxl:用于将内容写入excel

-----------------------------------------前言-----------------------------------------------

此代码仅可以使用,复杂度较高。若有更好修改可私信,谢。

代码比较简单,有注释,不过多解释。看代码即可。有问题或错误请私聊。

目前仅支持两种格式。

--------------------------------------代码开始--------------------------------------

import docx
import openpyxl
import re

#题干:A ,选项A:B,选项B:C,选项C:D,选项D:E
#支持以下类型数据()中内容为备注
#1,这是文件的主体              (以数字开头1-9)
#A,这是选项A                (A选项重要,不要正好匹配A...B...C...D...)
#B这是选项A                     (匹配的是以A-D开头)
# C这是选项A                        (前面允许有空格)
#D这是选项B
#2,这是文件的主体
#A,选项A B,选项B C选项C D选项D                 (空格切割选项注意内容不要有其他)

count = 0 #主计数

count1 = 0
count2 = 0
count3 = 0
count4 = 0
count5 = 0     #计数器

in_world_path=r"/home/user1/桌面/任务三.docx"
content=docx.Document(in_world_path)         #得到内容
wb=openpyxl.Workbook()
ws=wb.active

def first_num(in_text):
    stat = 0    #状态码
    pattern = r"^ *[0-9].*"     #正则表达式
    get_value = re.findall(pattern,in_text)
    if get_value != []:
            global count5       #使用全局的计数器
            count5 += 1    #自增
            get_key = str("A") + str(count5)    #拼接键
            ws[get_key] = in_text
            stat = 1    #写入数据后将转态码置1
    return stat
#返回状态码1写入0跳过

def first_B(in_text):
    stat = 0    #状态码
    pattern = r"^ *B.*"   #正则表达式
    get_value = re.findall(pattern,in_text)
    if get_value != []:
            global count1       #使用全局的计数器
            count1 += 1    #自增
            get_key = str("C") + str(count1)    #拼接键
            ws[get_key] = in_text
            stat = 1    #写入数据后将转态码置1
    return stat
#返回状态码1写入0跳过

def first_C(in_text):
    stat = 0    #状态码
    pattern = r"^ *C.*"   #正则表达式
    get_value = re.findall(pattern,in_text)
    if get_value != []:
            global count2       #使用全局的计数器
            count2 += 1    #自增
            get_key = str("D") + str(count2)    #拼接键
            ws[get_key] = in_text
            stat = 1    #写入数据后将转态码置1
    return stat
#返回状态码1写入0跳过


def first_D(in_text):
    stat = 0    #状态码
    pattern = r"^ *D.*"   #正则表达式
    get_value = re.findall(pattern,in_text)
    if get_value != []:
            global count3       #使用全局的计数器
            count3 += 1   #自增
            get_key = str("E") + str(count3)    #拼接键
            ws[get_key] = in_text
            stat = 1    #写入数据后将转态码置1
            #print (stat)
    return stat
#返回状态码1写入0跳过

def first_A(in_text):
    #ex=['1','2','3','4']
    stat = 0 
    pattern = r"^ *A.*"
    get_value = re.findall(pattern,in_text)         #匹配第一行是否为A开头(不包含空格)
    if get_value != []:
        global count4
        count4 += 1
        pattern = r" *^A.*B.*C.*D.*"
        rest = re.findall(pattern,in_text)      #判断四个选项是否在一行
        if rest !=[]:
            #ex=re.split(r"[A-D]",star)         #[A-D]其中一个字母开始分割
            ex=re.split(r"\s+",in_text)         #以空格切割
            num=0           #计数器,统计返回的元素的个数
            for i in ex:                            #计数开始
                num = num+1
            if num != 4:                                #如单行不符合条件则返回列表和对应元素数量
                print (num)
                print (ex)
            get_key= str("B")+str(count4)       #分开处理每行数据   ['12313', '12323123', '2132313123', '123123123']    
            ws[get_key]=ex[0]                       # 交给原定的方法去处理
            first_B(ex[1])
            first_C(ex[2])
            first_D(ex[3])
        if rest == []:
            get_key= str("B")+str(count4)
            ws[get_key]=in_text                     #正常写入 
    return stat



def main(name):
    for i in content.paragraphs:
        global count            #主要的计数器记录行
        count = count +1
        tex=i.text
        #print (tex)
        w1 = first_num(tex)
        if w1 == 0 :
            w2 = first_A(tex)
            if w2 == 0:
                w3 = first_B(tex)
                if w3 == 0:
                    w4 = first_C(tex)
                    if w4 == 0:
                        w5 = first_D(tex)
                        if w5 == 0:
                            #print ("非常规数据"+tex)           #不符合预期
                            pass
    wb.save(name)
    print (count)





if __name__ == "__main__":
    out_excel_path="ceshi.xlsx"
    main(name=out_excel_path)






 

 


http://www.kler.cn/news/309955.html

相关文章:

  • 【RabbitMQ】工作模式
  • 20240911软考架构-------软考156-160答案解析
  • 【物联网】深入解析时序数据库TDengine及其Java应用实践
  • 力扣最热一百题——合并两个有序链表
  • do { ... } while (0) 的意义
  • 单片机拍照_将采集的RGB图像封装为BMP格式保存到SD卡
  • Pandas_sqlite
  • bestphp‘s revenge1
  • 排序----数据结构
  • 9.18日常记录
  • cmd修改游戏数据处理量大小
  • vue获取最近7天时间;获取任意时间段时间
  • 【前端】main.js中app.vue中 render函数的作用及使用背景
  • 【数据库】MySQL-基础篇-事务
  • 架构设计——概念和基础
  • 在 Android 中,自定义 View 的绘制流程
  • 【原创】java+springboot+mysql校园订餐网系统设计与实现
  • JSON语法
  • go语言后端开发学习(七)——如何在gin框架中集成限流中间件
  • 【VUE】快速上手
  • 企业CAD图纸防泄密措施有哪些?10个真实有效方法分享
  • Science Robotics 在小动物模型中实现渐进和可逆主动脉收缩的软机器人平台
  • 202409011在飞凌的OK3588-C的核心板跑Rockchip原厂的Android12时挂载触摸屏ft5x06之后使用i2c-tools检测
  • 「DAOI R1」Magic
  • gitee远程仓库OPEN GIT BASH HERE从错误中学习
  • 形式向好、成本较低、可拓展性较高的名厨亮灶开源了
  • 打通最后一公里:使用CDN加速GitHub Page的访问
  • 分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
  • No module named MYSQLdb 问题解决
  • 《深度学习》—— PyTorch的神经网络模块中常用的损失函数