感悟网 导航

实现python文本写入word python怎么创建word文件

作者&投稿:潮农 (若有异议请与网页底部的电邮联系)
python如何读取word文件中的文本内容并写入到新的txt文件?~


from docx import Document
# 打开 word文件
f = open('随便写写行.docx', 'rb')
# 读取 word文件内容
document = Document(f)
# 打印 word 文档段落内容2进制列表
# print(document.paragraphs)
# 打开一个txt文档用来写入数据
with open('result2.txt', 'w') as fw:
# 遍历 word 段落内容列表
for context in document.paragraphs:
# 以换行符转换成列表
text = context.text.split('
')
# 按行写入,同时换行
fw.write(f"{text[0]}
")
# 打印看看效果
print(text[0])
f.close()

两行代码搞定(其实一行就可以创建了,不过关闭语句必须得有,或者你可以使用with open语句创建文档,就可以不使用close()方法关闭,它会自动关闭):
f=open('test.docx','w') #创建docx格式文件f.close() #关闭文档,为了解除当前python程序对test.docx文档的占用测试:
首先此目录并无docx的文档:

2.运行代码:

3.再次查看目录:

已经多个一个test.docx,word的空文档。因为没有写入数据,所以是空文档。
你可以在f.close()之前,使用f.wrie('testadfas')写入数据,然后再调用f.close()关闭

准备
我测试使用的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 open文件操作写入word为啥打不开》
答:Word文件的格式远没有这么简单,你这种直接写入的方式只适用于纯文本文件。

《如何利用python抓取网页中的内容并存到word中》
答:方法很多,比如之前提到的pypdf。然而用起来其实稍显麻烦,很多操作不够方便。所以我一般用pdf2htmlex(github上有,一个国人项目,非python)先把pdf转html,接下来再用bs4来解析处理。好处是处理html的工具非常非常丰富,且pdf2htmlex对原页面的效果保持得特别好,特别是对于那些个用word和latex导出的pdf里...

《用python操作word,请问在word中新建一页的语句是什么》
答:安装库pip install docx# 建个页from docx import Documentfrom docx.shared import Inchesdocument = Document()document.add_heading('Document Title', 0)p = document.add_paragraph('A plain paragraph having some ')p.add_run('bold').bold = True #加粗p.add_run(' and some ') p.add...

《我想用Python操作word,网上看了些代码,但自己的老是报错,求高手看看...》
答:看了一下应该是没有自动创建constants变量,constants是空的 先运行语句:win32com.client.gencache.EnsureDispatch('Word.Application')应该就可以了 或者运行pythonwin菜单栏选择Tools——>Com MakePy Utility然后在弹出的窗口中选择Microsoft Word x.y Object Library 点击OK就可以了 或者直接运行client文件夹...

《如何把python的结果导入txt文件中去?》
答:from __future__ import print_function print(filtered_sentence,file="文件名")

《如何使用Python在word的指定位置插入图片?》
答:可以参考这篇博文用Python在word的指定位置插入图片

《Python 如何实现对C: 测试.docx的内容修改增加并且保存?》
答:需要用到python-docx模块,大概的流程是:打开文档->遍历段落->找到要修改的内容并修改->保存,以下为一示例:from docx import Document 打开文档 doc = Document('word示例文档.docx')遍历段落 for para in doc.paragraphs:para.text = para.text.replace("文字","word")doc.save('word示例文档2...

《word文档中文本输入的,字母标点符号数字在Python中是一样的吗?高中机考...》
答:在Python中,字母、标记符和数字是不同的。在处理文本时,可以使用Python的字符串操作来处理这些元素。对于字母,可以用isalpha()方法来判断一个字符是不是字母。char = 'a'if char.isalpha():print('This is a letter.')对于标记符号和数字,可以使用isdigit()方法和isalnum()方法分别判断是否是数字...

《Python中的文件读写-理论知识》
答:Python处理两种不同类型的文件:二进制文件和文本文件。了解两者之间的差异很重要,因为它们的处理方式不同。二进制文件 在正常计算机使用期间使用的大多数文件实际上是二进制文件,而不是文本。比如:Microsoft Word .doc文件实际上是一个二进制文件,即使它只有文本。二进制文件的其他示例包括:图像文件,...

《我用python想往文本里写东西,代码如下 for i in range(0,10): f...》
答:str = '1234567890'f = open(r'c:\1.txt','w') #在window系统 for word in str:f.write(word + '\n')

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网