¿Qué encontrarás en este post?
Toggle¿Cómo crear un programa que lea un fichero .txt?
¡Hola! Soy Antonio Alfonso Martínez y en este artículo, vamos a crear un sencillo programa que sea capaz de leer un fichero de texto (de extensión “.txt”) que nosotros previamente le indiquemos, mediante salida de audio. ¿Listos?
La confección de dicho programa va a ser de gran facilidad para nosotros, pues vamos a combinar lo que en su momento aprendimos acerca de la lectura de ficheros de texto, en un artículo al que me remito al final, y el empleo de la librería para “Windows”, “win32com” (a cuyo correspondiente artículo también me remitiré al final de este tutorial).
Puesto que lo que queremos es generar una salida de audio, lo primero que haremos será importar la referida librería del modo que ya conocemos:
Para aquellos que aún no tengáis instalada esta librería, tendréis que instalar “pywin32” o “pypwin32” haciendo uso del módulo “pip”.
En realidad, este es el único recurso externo que vamos a emplear en la confección de nuestro programa. Por lo cual, pasaremos a definir una función (de nombre “conti”, relacionada con la introducción de opciones) cuya razón de ser explicaremos en su momento:
Tras ello, empezaremos a preparar nuestro programa para que sea capaz de generar audio a partir de texto escrito con “win32com”. Esto lo haremos creando el objeto “speak” que se encargará de llevar a cabo tal acción. Como se ve en la imagen, eso lo haremos escribiendo “speak=wc.Dispatch(“Sapi.SpVoice”)”:
Con lo visto hasta ahora, nuestro programa ya está listo para generar audio a partir de texto. En las líneas siguientes lo que haremos será indicarle la información que queremos que “lea”. Para ello, lo que haremos será pedir a nuestro hipotético usuario, que introduzca el nombre (sin la extensión, la cual, añadiremos nosotros mismos al input) del fichero de texto que desea que nuestro programa reproduzca. Dicha información se almacenará en una variable a la que hemos dado el nombre de “texto”:
Una vez declarada la variable “texto” nuestro programa, lo primero que tendrá que hacer es abrir dicho fichero. No obstante, existe la posibilidad que (por algún error a la hora de introducir el nombre del fichero) nuestro programa no pueda abrirlo al no encontrarlo. Dicha situación tendrá que ser prevista de algún modo. Para ello utilizaremos una sentencia “try” mediante le indicamos a nuestro programa que “intente” la apertura de dicho archivo, de modo que si no puede completar esta operación (“except: “) nos muestre el correspondiente mensaje de error:
De este modo, hacemos que para el caso de no poderse abrir el fichero pedido (por estar mal escrito o no encontrarse ubicado en el lugar correcto), el programa nos muestre un mensaje advirtiendo al usuario de que dicho archivo no ha sido encontrado, y dando a su vez, la posibilidad de continuar o finalizar el programa (para lo cual el usuario tendrá que introducir “n” o “s” de acuerdo a la información requerida por la función “conti”, a la que me referí con anterioridad).
Programar para abrir el fichero .txt
Bien, una vez que tenemos previsto como ha de actuar nuestro programa para el caso que no encuentre el fichero pedido por el usuario, pasaremos a programar el supuesto en el que el programa si pueda encontrar y abrir dicho fichero. En tal caso, lo que nuestro código ha de hacer es proceder a la lectura de dicho fichero, leyéndolo línea a línea. Para ello emplearemos el método que, en su momento vimos en la serie dedicada a la gestión de ficheros de texto con python (a la que me remito al final). De tal modo, que para recorrer las líneas que compongan el archivo “.txt”, escribiremos:
Como se ve, lo que estamos haciendo es usar un ciclo “for” que irá recorriendo las lineas de las que se compone el texto a leer, tal y como vimos en su momento cuando hablábamos de ficheros de texto. En aquella ocasión para cada lectura de línea, imprimíamos su contenido (mediante la sentencia “print”). No obstante, en este caso lo que queremos es generar un audio que recite el contenido de la misma. Por ello, en este caso, donde antes usábamos “print”, haremos una llamada a la variable “speak” que, tal y como veíamos anteriormente, era la que contenía el objeto que producía la salida de audio:
De ese modo, el programa aplicará la función “.Speak” al contenido de la variable “linea” (el cual, se corresponde con el texto contenido en cada una de las líneas de texto que componen el archivo “.txt”).
Así, si le pedimos a nuestro programa que reproduzca (por audio) el contenido de un archivo de nombre, por ejemplo, “new york.txt”, que se encuentre ubicado en nuestra carpeta python, se procederá a leer, línea a línea, dicho archivo (mediante salida de audio).
Ejecución en consola durante la lectura de un archivo
En lo referente a la lectura del archivo, cabe hacer referencia al hecho de que la pronunciación que tenga el audio, viene determinada por el idioma que venga establecido como predeterminado en el sistema operativo “windows” del que se trate. Esto es importante tenerlo en cuenta, debido a que si hacemos que nuestro programa lea un texto en español, siendo el idioma preestablecido , por ejemplo, inglés, la lectura del mismo, no producirá ningún error, pero si que sonará bastante raro.
Como puede apreciarse en el código sobre estas líneas, una vez finalizada la lectura del fichero de texto, daremos al usuario la posibilidad de continuar o finalizar la ejecución del programa, haciendo uso de la función “conti” que ya definimos al comienzo.
Como mencioné más arriba, para la creación de este programa hemos hecho uso de los conocimientos que adquirimos en dos artículos anteriores de este blog, cuyos enlaces son los siguientes:
LECTOR (POR AUDIO) DE FICHEROS DE TEXTO CON “win32com” EN PYTHON.
TRABAJANDO CON FICHEROS DE TEXTO: LECTURA DE UN FICHERO CREADO (ejercicio básico)
-> A su vez, podéis ver el código completo del este programa en el siguiente enlace de github:
Si tienes cualquier duda escríbela más abajo en comentarios. ¡Saludos!
Programador y desarrollador autodidacta. Semanalmente publica en el blog “El programador Chapuzas“ (wordpress) y también colaboro en las páginas “Código Comentado” y “Algoritmos MathPy” de Facebook.
Si tienes algo que deseas compartir o quieres formar parte de KeepCoding, escríbenos a [email protected].