Python使用docx模块实现刷题功能代码

来源:脚本之家  责任编辑:小易  

docx文件的结构分为三层,1、Docment对象表示整个文档;2、Docment包含了Paragr

起由:

前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦!遂开始敲代码,我要一题一题做,还不能看见答案。

我也想知道,但是好像只有插入图片功能

着手:

word文档是这样的:

python是当下十分火爆的编程语言,尤其在人工智能应用方面。如果有心从事编程方向的工作,最好到专业

观察word内容,每道题目的题目内容和题目答案都是一样的格式,包括缩进、字体等等,那么就可以使用Python对文件的读操作,浏览文档的内容,在适当的内容区域设置输入,将输入与答案进行判断是否相等,即可实现简单的刷题功能。

首先就是安装python之后的环境变量设置然后其实直接安装了VS code再在扩展那安Pytho

Python默认不支持直接打开doc文件并读写,但是可以打开docx文件,但是docx文件必须是经过Word程序制作或转换而来的。如果文件太多,一个一个手动转化太麻烦,就要使用程序对文件批量转化,使用win32com模块可以使用此功能。

提供源码及样本,可以帮你调试下

话不多说,放码!(部分思路在代码中注释):

一年级孩子绝大部分都能认识一些字了,只是识字量和识字的主动意识不同而已。从孩子的发育成长来说,6岁的孩子有足够的识字能力,只是身边的成年人是否有意识地去引导孩子。记得去年在一个学前班里,二十多个孩子给了我很深刻的印象:1,有一两个识字能力很强的孩子,很明显地鹤立鸡群,每次的故事时间基本上都能走进故事的思路,随着故事的进展也能激发他的想象力,几次故事课下来,就能确认这几个孩子的思维扩散和理解甚至领悟能力要强于其他孩子。对于这样的孩子,由不得老师不表扬和欣赏,这样每次的故事结束后,都能感觉这几个孩子相比其他孩子所吸收的东西要多,也能感觉到他学习的更大兴趣,这就是一个良性循环。2,也有几个孩子对故事

首先批量将doc转化为Python能够打开并读写的docx文档:

不是每一次住上“新房”都是要再买一套。可能是住了几年十几年的老房改造一下,也可能是资金短缺买了的二手房改造一下。很多案例都在证明着,改造的好的老房,也是真真真真真真真真真真真真真真的好看又舒适!改造案例一:爆改45平的的蜗居房改造前的样子:改造后的样子:1、客厅,谷仓门+玻璃隔断2、衣帽间玻璃门,打开门就能看到卧室。分隔区域,也让空间更加通透~3、卫生间虽然只有面积真的很小,但依然要干湿分离,并且浴缸不能少。4、厨房不止做饭,洗衣机也在里面5、入户门厅巨型鞋柜也真的是简直了!案例2:30年老宅改造改造前↓改造ing:1、重刷乳胶漆2、灯走了明线,餐厅和客厅上面特意都买了黑色的灯线,看起来更北欧

#!/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

  买房子在现代人生活中必然是一件大事情了,很多人都希望在大城市生活,有自己的一套大房子,生活便捷,交通方便。但是买房子,那又该买哪一层最好呢?听说一层跟顶层是比较少人买的,那一起去对比下,一层的房子有到底值不值得买呢?    先说说一楼住户的优点:  1.生活方便,不用爬楼梯,挤电梯。不用缴电梯费,不用担心电梯的故障问题,而且当发生大楼意外,一楼是最安全逃生的。  2.有些小区为了搞活动,销售一楼出去,就赠送花园或者前院面积,这些是其他楼层没有的。  3.使用面积比其他楼层更大,不同的城市就不同价钱,大部分一楼是比较便宜的,但是使用面积是比较大的。  这些是一楼的好处,很多人也喜欢住一楼,特

结果是这个样子的:

\"熊孩子\"这个称呼,除了开玩笑时的自嘲外,谁又愿意给别人说,嘿,我家有个熊孩子呢?现在很多的年轻父母越来越重视对孩子的培养,尤其是对孩子阅读习惯的培养。在培养孩子阅读习惯前,首先,我们要想明白,为什么要培养孩子的阅读习惯?答案无外乎两种。一种观点是,爱阅读,学习成绩肯定好啊,以后能考个好大学找个好工作。所以这类家长会问,有没有什么影响力比较大的书啊?读哪些书会提高作文成绩啊?给孩子买回一堆作文书后,还时不时去看看作文成绩有没有提高。这是功利型的父母,希望孩子通过阅读提高学习成绩。另一种观点认为,读书就是读书,读书可以增长见识,丰富人生,开阔思维,如果学习成绩顺带提高了,那就算是附加值了。我

再进行我们的正题,开始刷题:

#!/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)

结果是这个样子的:

\"熊孩子\"这个称呼,除了开玩笑时的自嘲外,谁又愿意给别人说,嘿,我家有个熊孩子呢?现在很多的年轻父母越来越重视对孩子的培养,尤其是对孩子阅读习惯的培养。在培养孩子阅读习惯前,首先,我们要想明白,为什么要培养孩子的阅读习惯?答案无外乎两种。一种观点是,爱阅读,学习成绩肯定好啊,以后能考个好大学找个好工作。所以这类家长会问,有没有什么影响力比较大的书啊?读哪些书会提高作文成绩啊?给孩子买回一堆作文书后,还时不时去看看作文成绩有没有提高。这是功利型的父母,希望孩子通过阅读提高学习成绩。另一种观点认为,读书就是读书,读书可以增长见识,丰富人生,开阔思维,如果学习成绩顺带提高了,那就算是附加值了。我

以上这篇Python使用docx模块实现刷题功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

实现python文本写入word

准备

我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了。

使用Speech API

原理

我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相关的接口。所以我们需要安装pywin32来帮助我们完成这一个底层的交互。

示例代码

import win32com.clientspeaker = win32com.client.Dispatch("SAPI.SpVoice")speaker.Speak("Hello, it works!")

小总结

是的,调用接口来实现语音功能就是这么简单,但是我们不得不来聊一聊这种方式的缺点。

对中文支持的不够好,仅仅是这一点,估计在中国没几个用它的了。

还有就是语速不能很好的控制

pyttsx方式

原理

pyttsx 是Python的一个关于文字转语音方面的很不错的库。我们还可以借助pyttsx来实现在线朗读rfc文件或者本地文件等等,最为关键的是,它对中文支持的还是不错的。

示例代码

# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')# __author__ = '郭 璞'# __date__ = '2016/8/6'# __Desc__ = 文字转语音输出import pyttsxengine = pyttsx.init()engine.say('hello world')engine.say('你好,郭璞')engine.runAndWait()# 朗读一次engine.endLoop()

小总结

使用pyttsx,我们可以借助其强大的API来实现我们基本的业务需求。很酷吧。

pyttsx深入研究

做完上面的小实验,你肯定会觉得怎么这么不过瘾呢?

别担心,下面我们就一起走进pyttsx的世界,深入的研究一下其工作原理吧。

语音引擎工厂

类似于设计模式中的“工厂模式”,pyttsx通过初始化来获取语音引擎。当我们第一次调用init操作的时候,会返回一个pyttsx的engine对象,再次调用的时候,如果存在engine对象实例,就会使用现有的,否则再重新创建一个。

pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine

从方法声明上来看,第一个参数指定的是语音驱动的名称,这个在底层适合操作系统密切相关的。如下:

1.drivename:由pyttsx.driver模块根据操作系统类型来调用,默认使用当前操作系统可以使用的最好的驱动

sapi5 - SAPI5 on Windows

nsss - NSSpeechSynthesizer on Mac OS X

espeak - eSpeak on every other platform

2.debug: 这第二个参数是指定要不要以调试状态输出,建议开发阶段设置为True

引擎接口

要想很好的运用一个库,不了解其API是不行的。下面来看看pyttsx。engine.Engine的引擎API。

方法签名 参数列表 返回值 简单释义

connect(topic : string, cb : callable) topic:要描述的事件名称;cb:回调函数 → dict 在给定的topic上添加回调通知

disconnect(token : dict) token:回调失联的返回标记 Void 结束连接

endLoop() None → None 简单来说就是结束事件循环

getProperty(name : string) name有这些枚举值“rate, vioce,vioces,volumn → object 获取当前引擎实例的属性值

setProperty(name : string) name有这些枚举值“rate, vioce,vioces,volumn → object 设置当前引擎实例的属性值

say(text : unicode, name : string) text:要进行朗读的文本数据; name: 关联发音人,一般用不到 → None 预设要朗读的文本数据,这也是“万事俱备,只欠东风”中的“万事俱备”

runAndWait() None → None 这个方法就是“东风”了。当事件队列中事件全部清空的时候返回

startLoop([useDriverLoop : bool]) useDriverLoop:是否启用驱动循环 → None 开启事件队列

元数据音调

在pyttsx.voice.Voice中,处理合成器的发音。

age

发音人的年龄,默认为None

gender

以字符串为类型的发音人性别: male, female, or neutral.默认为None

id

关于Voice的字符串确认信息. 通过 pyttsx.engine.Engine.setPropertyValue()来设置活动发音签名. 这个属性总是被定义。

languages

发音支持的语言列表,如果没有,则为一个空的列表。

name

发音人名称,默认为None.

更多测试

朗读文本

import pyttsxengine = pyttsx.init()engine.say('Sally sells seashells by the seashore.')engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait()

事件监听

import pyttsxdef onStart(name): print 'starting', namedef onWord(name, location, length): print 'word', name, location, lengthdef onEnd(name, completed): print 'finishing', name, completedengine = pyttsx.init()engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait()

打断发音

import pyttsxdef onWord(name, location, length): print 'word', name, location, length if location > 10: engine.stop()engine = pyttsx.init()engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait()

更换发音人声音

engine = pyttsx.init()voices = engine.getProperty('voices')for voice in voices: engine.setProperty('voice', voice.id) engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait()

语速控制

engine = pyttsx.init()rate = engine.getProperty('rate')engine.setProperty('rate', rate+50)engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait()

音量控制

engine = pyttsx.init()volume = engine.getProperty('volume')engine.setProperty('volume', volume-0.25)engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait()

执行一个事件驱动循环

engine = pyttsx.init()def onStart(name): print 'starting', namedef onWord(name, location, length): print 'word', name, location, lengthdef onEnd(name, completed): print 'finishing', name, completed if name == 'fox': engine.say('What a lazy dog!', 'dog') elif name == 'dog': engine.endLoop()engine = pyttsx.init()engine.say('The quick brown fox jumped over the lazy dog.', 'fox')engine.startLoop()

使用一个外部的驱动循环

engine = pyttsx.init()engine.say('The quick brown fox jumped over the lazy dog.', 'fox')engin(www.alOnely.Com.Cn)e.startLoop(False)# engine.iterate() must be called inside externalLoop()externalLoop()engine.endLoop()

总结

以上就是Python如何实现文本转语音的全部内容,看完了上面的讲述,是不是感觉Python实现文本转语音还是蛮简单的?那么,大家快来尝试尝试吧。希望本文对大家学习Python有所帮助。

Python-docx 插入题注

Table本身没有题注的实现,只能自己写一个文字上去。追问大佬,我要实现的是题注能自动更新, 比如Table 1 、Table 2 ...这种效果,你能告诉我docx咋设置题注吗,万分感谢啊。本回答被网友采纳

python-docx模块,如何修改已有文本的同时不修改样式?

可以先获取原样式,改变文字再赋值样式本回答被网友采纳

如何用python-docx替换一个docx文本中的指定字符

from docx import Document

wb=Document(r"C:\Users\Robin\Desktop\TEST.docx")

for x in wb.paragraphs:

x.text=x.text.replace('ABC','DEF')

wb.save(r"C:\Users\Robin\Desktop\TEST_out.docx")

本回答被提问者和网友采纳

  • 本文相关:
  • python实现生成word、docx文件的方法分析
  • python使用python-docx读写word文档
  • python读写docx文件的方法
  • python对列表中的各项进行关联详解
  • python递归打印某个目录的内容(实例讲解)
  • python检查 云备份进程是否正常运行代码实例
  • python模拟百度自动输入搜索功能的实例
  • python利用拉链法实现字典方法示例
  • python3.2模拟实现webqq登录
  • python使用 beanstalkd 做异步任务处理的方法
  • python安装与使用redis的方法
  • python如何解析配置文件并应用到项目中
  • python实现闹钟定时播放音乐功能
  • 实现python文本写入word
  • Python-docx 插入题注
  • python-docx模块,如何修改已有文本的同时不修改样式?
  • 如何用python-docx替换一个docx文本中的指定字符
  • 哪位大神知道如何用Python中的docx模块删除docx文档中的表格?
  • python创建docx时怎么设置页面布局
  • 使用python-docx 如何向word中插入文件对象
  • 如何使用python将docx文件的一部分内容复制到新建文档中?
  • 如何用Python实现doc文件批量转换为docx
  • python-docx打开word给表格增加一行,却没有样式,是一个空白行(如图)
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved