演讲前从文本中删除换行符

时间:2018-07-09 18:42:46

标签: python

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"))

哪个可以完美地工作,请问如何在我的代码中插入它?

顺便说一句,该功能中不应该有关闭文件吗?

3 个答案:

答案 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”,可以尝试一下