Python使用docx模块实现刷题功能代码
作者:roohom 发布时间:2021-03-12 22:28:30
标签:Python,docx模块,刷题
起由:
前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦!遂开始敲代码,我要一题一题做,还不能看见答案。
着手:
word文档是这样的:
观察word内容,每道题目的题目内容和题目答案都是一样的格式,包括缩进、字体等等,那么就可以使用Python对文件的读操作,浏览文档的内容,在适当的内容区域设置输入,将输入与答案进行判断是否相等,即可实现简单的刷题功能。
Python默认不支持直接打开doc文件并读写,但是可以打开docx文件,但是docx文件必须是经过Word程序制作或转换而来的。如果文件太多,一个一个手动转化太麻烦,就要使用程序对文件批量转化,使用win32com模块可以使用此功能。
话不多说,放码!(部分思路在代码中注释):
首先批量将doc转化为Python能够打开并读写的docx文档:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File : 批量将doc转换为docx.py
# Author: roohom
# Date : 2018/9/17 0017
'''
使用Word批量将doc转化为docx
- 调用win32com,打开Word应用程序
- 打开doc
- 保存成docx
- 关闭word
- 转入下一个doc并重复上述操作
'''
from win32com import client as wc
def doSaveAas():
word = wc.Dispatch('Word.Application')
#延时5秒钟,防止由于系统配置原因还没打开Word就进行下一步程序
#time.sleep(5)
doc = word.Documents.Open(r'{0}'.format(word_name)) # 目标路径下的文件
doc.SaveAs(r'{0}'.format(word_docx_name), 16) # 转化后路径下的文件,16表示docx格式
doc.Close()
word.Quit()
if __name__ == '__main__':
k = 1
i = 3
j = 3
while True:
word_name = "D:\学习区\Python\python二级考试试题\选择题\python二级考试试题{0}.doc".format(i)
word_docx_name = "D:\学习区\Python\python二级考试试题\选择题\python二级考试试题{0}".format(j)
doSaveAas()
i += 1
j += 1
print("已完成{0}个word从doc到docx的转换".format(k))
k += 1
结果是这个样子的:
再进行我们的正题,开始刷题:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File : MyDemo.py
# Author: roohom
# Date : 2018/9/17 0017
'''
刷题脚本
- python对文件读写等操作的强大功能
- 使用docx模块对docx文档进行读写
- python不支持直接打开并读取word文档,因此需要使用方法将doc转化为docx,方法详见doc_to_docx.py
- 原理
- 打开经转化后的docx文档,并逐行读文件内容
- 判断是否读到“正确内容”语句
- 是,设置用户输入,提示输入用户的答案
- 否,继续读操作
- 比较用户的答案与正确答案是否一样
- 是,输出正确提示
- 否,输出错误提示
- 继续下一题,重复上述操作
- 拓展延伸
- 可以在程序主入口处设置用户输入,输入用户想要打开的路径、文件,程序根据文件名、路径等进行上述操作
- 可以根据用户输入情况设置加分减分,并根据全部答案情况,分析错误题目,后续将错题重修整理收集,反馈给用户
'''
import docx
'''
字符串比较的一种麻烦方法:
def comparison(a, b):
ib=0
for ia in range(len(a)):
if ord(a[ia:ia+1])-ord(b[ib:ib+1])==0:
ib=ib+1
if ib==len(b):
print('你的答案正确!')
else:
print('你的答案错误!')
break
'''
def comparison(a, b):
if a == b :
print("你的答案正确!")
else:
print("你的答案错误!")
if __name__ == '__main__':
file = docx.Document(r"D:\学习区\Python\python二级考试试题\选择题\python二级考试试题01.docx")
print("==================全国计算机二级考试之Python刷题==================")
for p in file.paragraphs:
m = p.text
if "正确答案: " in m:
ans = input("请输入你的答案:")
a = "正确答案: {0} ".format(ans)
print(a)
b = m
print(b)
comparison(a, b)
print()
print("==================全国计算机二级考试之Python刷题==================")
else:
print(m)
结果是这个样子的:
来源:https://blog.csdn.net/qq_39161804/article/details/82988319


猜你喜欢
- python 根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。 下面演
- 0. dockerfile命令FROM # 基础镜像,一切从这里开始构建MAINTAINER # 镜像是谁写的,姓名+邮箱RUN# 镜像构建
- 一、concat()函数功能:将多个字符串连接成一个字符串语法:concat(str1,str2,…) 其中的字符串既可以是数据表字段,也可
- 最近稍稍有点空闲时间,于是重新温习了一下之前学习过的python基础。废话不多说,记录一下自己的所得。首先,安装什么的不在本人的温习范围,另
- 这时候最好的做法就是按需引入,动态引入组件js和样式,文件load完成后调用callback,运行js。代码还是很简便的 1. 判断文件lo
- 看了oschina上的两个代码,受益匪浅。其中对join()方法不理解,看python官网文档的介绍:join([timeout]):等待直
- 本教程将分步讲解如何使用JQuery和CSS打造一个炫酷动感菜单。jQuery的"write less, do more"
- mysql explain命令用于显示mysql如何使用索引来处理select语句以及连接表。通过该命令可以分析出查询语句或是表结构的性能瓶
- 这篇文章主要介绍了wxpython自定义下拉列表框过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 导语嘿!前不久刚刚给大家过一款反弹球的小游戏嘛!不知道大家还记得不?不记得可以看下往期的内容呢,在上一期的基础上升级了这款打砖块的小游戏,界
- 本文实例讲述了JavaScript设计模式之模板方法模式原理与用法。分享给大家供大家参考,具体如下:一、模板方法模式:一种只需使用继承就可以
- 系列教程MySQL系列之开篇 MySQL关系型数据库基础概念 MySQL系列之一 MariaDB-server安装 MySQL系列之二 多实
- 概要:本文主要描述XHTML中相对定位和绝对定位各自的本质、用法、区别和两者之间的关系。以及使用CSS的Left、Right、Top、Bot
- 之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB、CBC、CFB、OFB,这四种用的是
- 本文实例讲述了PHP模板引擎Smarty中变量的使用方法。分享给大家供大家参考,具体如下:一、概述:Smarty 是 PHP 众多模板引擎中
- pycharm程序界面一般有很多子窗口,如图1所示。pycharm项目视图-运行窗口图1 Pycharm子窗口如果你发现某些子窗口不见了,图
- 具体用法如下: -- ============================================= -- Author: cy
- 本文实例讲述了python版本的读写锁操作方法。分享给大家供大家参考,具体如下:最近要用到读写锁的机制,但是python2.7的自带库里居然
- 动态添加表单项iview的动态添加表单很简单,只需设置好表单项为一个array,添加新项目的时候就push一个默认好的值,剩下的iview会
- 本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,随机从其中选取一部分数据,并将全部文件中随机获取