Python 3.7,Windows7。初学者。
我正在尝试制作一个简单的程序,将文本转换为语音 并保存为mp3。最终目的是将书籍转换为mp3。
我可以将文本文件加载到字符串中,然后gtts播放并保存它。
问题是,在每一行的末尾都说字母“ n”。 声音在说换行符。
解决该问题的一种方法是将原始文本全部排成一行,例如没有换行符,但这有点小毛病和不切实际。
我尝试阅读以下文档 https://media.readthedocs.org/pdf/gtts/latest/gtts.pdf
但是说实话,我对此没有多大意义,我还是个初学者。
我已经找到了一个功能,该功能可以完美地独立运行, 问题是无论我尝试什么,我都无法将其集成到我的小程序中,因为无论如何,我都不会删除换行符。
我已经尝试了许多来自此和其他Google来源的方法,但都无济于事 对我来说,否则我听不懂。
此代码有效,但语音在每行后都说“ \ n”。
from gtts import gTTS
import os
f = open("c:\\temp\\test.txt","r")
lines = f.readlines()
f.close()
tts = gTTS(text=str(lines),lang='en-uk')
tts.save("test.mp3")
os.system("start test.mp3")
我在这里找到了这个功能: https://www.w3resource.com/python-exercises/file/python-io-exercise-17.php
def remove_newlines(fname):
flist = open(fname).readlines()
return [s.rstrip('\n') for s in flist]
print(remove_newlines("test.txt"))
哪个可以完美地工作,请问如何在我的代码中插入它?
顺便说一句,该功能中不应该有关闭文件吗?
答案 0 :(得分:1)
这应该有效:
curl
答案 1 :(得分:1)
您在此处看到的s.rstrip(c)
函数从字符串c
的右侧(即结尾)剥离由s
表示的字符。因此,如果字符串s
的末尾恰好包含换行符'\n'
,则s.rstrip('\n')
会将其从字符串末尾删除。
将其应用于代码的简单方法是
lines = remove_newlines("c:\\temp\\test.txt")
代替您当前正在做的事情
f = open("c:\\temp\\test.txt","r")
lines = f.readlines()
f.close()
此外,您对该功能没有关闭文件命令感到惊讶。好的观察-我会改写这样的函数:
def remove_newlines(fname):
with open(fname, 'r') as flist:
return [s.rstrip('\n') for s in flist.readlines()]
要说明,这里有一些东西要解压。首先,with
表达式有点像Java中的try-with-resources-在代码离开该范围的任何时候,即使中间出现错误,它也会自动关闭文件。接下来,在方括号中的表达式-这是 list理解,基本上是单行for
循环。它只是构造一个列表,其中每个元素都是在rstrip('\n')
中相应元素上调用flist.readlines()
的结果。
您应该在调用之前的某个时间在代码中插入函数定义,否则python会感到困惑。
答案 2 :(得分:1)
尝试使用remove_newlines函数进行以下更改
def remove_newlines(fname):
with open(fname) as f:
return f.read().replace("\n"," ")
print(remove_newlines("test.txt"))
我想到的另一件事是,在窗口的行尾是“ \ r \ n”,可以尝试一下