吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5394|回复: 86
收起左侧

[Python 原创] python把Word题库转成Excle题库

  [复制链接]
马马超超 发表于 2022-12-8 09:11


又到了一年一度的背题时刻,但是收到的题库是Word版的,页数特别多

题库截图

题库截图
,即不利于看,也不利于背,以前都是手动去把Word版转Excle版,但是通常挺费时的,问题还多。这次就想偷懒,祭出Python神器!
微信图片_20221208090320.png

微信图片_20221208090325.png
顺便把题库也打包上传了,有环境的直接RUN。
话不多说,上代码,有图有真相,代码里面备注的很详细,代码运行有问题的楼下留言。
[Python] 纯文本查看 复制代码
# 导入所需库
import csv
import os
import re

from docx import Document
from win32com import client as wc


# 打开word文档


def doc_to_docx(doc_file):
    full_path = os.path.abspath(doc_file)  # 绝对路径,便于分离文件位置、名和后缀
    word = wc.Dispatch("Word.Application")
    doc = word.Documents.Open(full_path)
    doc.SaveAs(os.path.splitext(full_path)[0] + '.docx', 12)  # 保存只改后缀 12 为docx
    doc.Close()
    word.Quit()
    return os.path.splitext(full_path)[0] + '.docx'


def save_to_csv(doc_name, date):  # date为list [[1],[2],[3]...]
    name = os.path.abspath(doc_name)
    # os.path.splitext(name)[0]
    out = open(f'{os.path.splitext(name)[0]}.csv', 'a', encoding='utf-8', newline='')
    csv_write = csv.writer(out, dialect='excel')
    for row in date:
        csv_write.writerow(row)
    out.close()
    print(f'文件{os.path.splitext(name)[0]}.csv生成完毕!请查看')


if __name__ == '__main__':
    """
    为防止格式错乱,请先在源文件里执行将^l替换为^p操作
    默认每个题目开头序号都是数字,如果不是,需要修改question_start_num对应的re代码
    """
    file_name = input("请输入word文件名(带后缀):")  # "2.doc"
    TG_style = '一二三四五六七八九、'  # 大题干类型(最后一位为符号)
    choose_split = "、"  # 选项分割符号A、 A.
    if file_name.endswith('.doc'):  # 加快处理速度:.docx比doc处理速度快,所以如果不是x结尾的转成x的
        file_name = doc_to_docx(file_name)
    document = Document(file_name)
    # 获取所有段落
    all_paragraphs = document.paragraphs
    start_num = 0  # 主干序号下角序号
    TX = ''  # 题型
    All_content = []  # 存储所有题内容
    tem = []  # 临时存储每个题类型、题干、选项、答案
    for paragraph in all_paragraphs:
        # 打印每一个段落的文字
        # print([paragraph.text])
        tittle_split = '、'
        question_start_num = re.compile(f'^\d')  # 识别题干头是否是数字
        p = re.compile(f'^{TG_style[start_num] + TG_style[-1]}')  # 匹配开头字符,筛选出大标号,区分题目类型
        tittle_ret = question_start_num.search(paragraph.text)  # 识别题干头
        ret = p.search(paragraph.text)  # 识别题型
        if ret:
            TX = paragraph.text.replace((TG_style[start_num] + TG_style[-1]), '', 1)
            start_num += 1
            # tittle_num = 1
            # print(TG)
            All_content.append(tem)
            tem = []
            All_content.append([paragraph.text])  # 读完题型,说明进入了题目内容
        else:
            if tittle_ret:  # 是否是题干
                All_content.append(tem)  # 如果是题干,证明上一题遍历完毕,进行缓存
                tem = [TX]  # 保存题型在第一位
                # print(f"{TG}{paragraph.text}")
                # tittle_num += 1  # 遇到题号不连续时继续处
            if All_content:  # 不是题干,缓存写了,说明在读取选项
                '''
                此处为了区分一行有多个选项的情况,逐个读取出来
                '''
                chooses = re.split(f"[A-Za-z]{choose_split}", paragraph.text)
                for choose in chooses:
                    if choose.replace(' ', ''):  # 替换掉选项中空格进行过滤
                        #print(choose)
                        tem.append(choose)
    save_to_csv(file_name, All_content)

Word_to_Excle.rar (13.63 KB, 下载次数: 513)

免费评分

参与人数 11吾爱币 +16 热心值 +10 收起 理由
yb19941109 + 1 + 1 我很赞同!
jingling4784 + 1 + 1 我很赞同!
盛世玫瑰 + 1 + 1 谢谢@Thanks!
yjn866y + 1 + 1 热心回复!
likebbs + 1 谢谢@Thanks!
xingruyubb + 1 + 1 谢谢@Thanks!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
onedayday-wb + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhaoqingdz + 1 谢谢@Thanks!
junshuiyujianni + 1 谢谢@Thanks!
zzzznl + 1 + 1 这么详细的注释真不容易

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

love5618775 发表于 2022-12-27 18:26
这种标准格式的题库,我一般这样操作:
1.替换“换行符A.”为”|A.“,“换行符B.”为”|B.“,“换行符C.”为”|C.“,“换行符D.”为”|D.“,此时题目变成:题干|A.|B.|C.|D.
2.存为TXT。
3.导入EXCEL,分隔符"|"。
4.完事。
当然,很多情况,题库并非标标准准的格式,我就借用考试酷软件进行自动格式化了,还挺好用
coverme 发表于 2022-12-8 10:42
13563219259 发表于 2022-12-8 10:59
analyzer 发表于 2022-12-8 11:20
有密码啊
xlhtjz 发表于 2022-12-8 11:26
谢谢分享
tianyagd 发表于 2022-12-8 11:28
如果题目有规律,比如都是题干,4个选项,1个答案,就可以 选中,然后文本转表格 (段落标记)设置为6列,就可以转成表格形式了。
嬉皮笑脸 发表于 2022-12-8 12:06

把鼠标悬浮再文件上会显示密码的
cloud2010 发表于 2022-12-8 13:20

自己动手丰衣足食
leipf 发表于 2022-12-8 14:32
可以可以 学习到了
 楼主| 马马超超 发表于 2022-12-8 15:07

密码52pojie
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 08:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表