Curso
Ejecuta y edita el código de este tutorial en línea
Ejecutar códigoEste tutorial explica cómo leer archivos de texto en Python. Es un primer paso esencial en cualquier proyecto que trabaje con datos de texto, especialmente en procesamiento del lenguaje natural (“NLP”). Al importar archivos de texto en Python hay matices y errores comunes que conviene conocer; por eso, a menudo los data scientists necesitan salir de paquetes conocidos como pandas para manejar texto con mayor eficiencia.
Para sacarle el máximo partido a este artículo, deberías tener conocimientos básicos de Python, en particular, entender tipos de datos como las diferencias entre strings, enteros y listas. También te ayudará saber qué es pandas y qué es un dataframe.
Si te interesa importar datos desde archivos .csv, lo cubrimos en el tutorial de pandas read csv(): importación de datos. Para aprender a importar desde archivos JSON y pickle (.pkl), echa un vistazo al tutorial Importar datos en pandas. Si lo tuyo es hacer web scraping de páginas HTML, quizá te interese Web scraping con Python (y Beautiful Soup). O, si prefieres, puedes empezar a aprender directamente en DataCamp con nuestro curso interactivo Introduction to Importing Data in Python; el primer capítulo es gratuito.
El archivo de texto
Para este tutorial, usaremos un archivo de texto sencillo que es una copia del primer párrafo de la página de Wikipedia sobre procesamiento del lenguaje natural. Lo hemos guardado como nlp_wiki.txt. Contiene lo siguiente:
"Natural language processing (NLP) is an interdisciplinary subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language, in particular how to program computers to process and analyze large amounts of natural language data. The goal is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves. Challenges in natural language processing frequently involve speech recognition, natural-language understanding, and natural-language generation."
Importar texto en Python
Importar datos con la función read_table() de pandas
La función read_table() de pandas está pensada para leer archivos de texto delimitados (p. ej., una hoja de cálculo guardada como texto, con comas separando columnas) en un dataframe. Nuestro archivo no está delimitado: es un simple copia y pega de texto. Aun así, usar pandas puede ser útil para ver el contenido rápidamente, ya que la sintaxis es similar a read_csv(), que la mayoría de data scientists conocen bien.
Con el siguiente código puedes leer un archivo de texto usando pandas.
pd.read_table('nlp_wiki.txt', header=None, delimiter=None)
Salida:

Pasamos el nombre del archivo de texto y dos argumentos a la función read_table().
header=Nonele indica a pandas que la primera fila contiene texto, no un encabezado.delimiter=Nonele indica a pandas que no divida las líneas en ningún punto (salvo saltos de línea), de modo que obtendremos una sola columna con una fila por línea.
En este caso, un DataFrame no siempre es ideal. Los párrafos se separan en líneas individuales (pandas usa el carácter de nueva línea para hacerlo) y no vemos el texto completo. Otra opción es llamar al método .to_list() de la columna.
pd.read_table('nlp_wiki.txt', header=None, delimiter=None)[0].to_list()
Salida:

Esto devuelve una lista de listas que puedes manejar como cualquier lista de Python. Además, imprime el texto completo.
Personalizar la importación con read_table()
La función read_table() tiene muchos argumentos opcionales; puedes consultarlos en la documentación oficial. Aquí van algunos de los más útiles:
skiprows=n

Omite las primeras n filas. En el ejemplo, saltamos la primera fila.
nrows=n

Mantiene solo las primeras n filas. En el ejemplo, hemos conservado la primera fila.
skip_blank_lines= True
pandas omitirá cualquier valor NaN en lugar de devolver una fila vacía.
Importar texto con loadtxt() de NumPy
loadtxt() de NumPy está pensada para leer arrays de números desde un archivo de texto; sin embargo, también puede leer líneas de texto. Es muy práctico si ya usas NumPy en el resto del análisis, porque la salida es un array de NumPy.
np.loadtxt('nlp_wiki.txt', dtype="str", delimiter="\0")
Salida:

Igual que en el ejemplo con pandas, pasamos el argumento delimiter para evitar que las líneas se dividan. En este caso, el delimitador debe ser un único carácter (usar None tiene otro comportamiento), así que usamos el carácter de terminación nula, \0. Como no puede aparecer en mitad de un string, usarlo equivale a "no usar delimitador".
También pasamos dtype="str", que le indica a NumPy el tipo de dato del array resultante. En nuestro caso usamos “str”, que devuelve strings. Esto también puede convertirse en lista con la función .tolist().
Importar archivos de texto con la función integrada open() de Python
La máxima flexibilidad se consigue con la funcionalidad integrada de Python. Es menos amigable y está pensada sobre todo para ingeniería de software. Para análisis de datos, normalmente bastan las soluciones con pandas o NumPy.
Para usar open() necesitas además un gestor de contexto, la palabra clave with. Así, tu equipo asigna recursos solo mientras se ejecuta el bloque indentado bajo with. En este caso, abrimos el archivo, lo recorremos y lo guardamos en memoria en la variable lines, y después se cierra.
El bucle for usa una list comprehension: cada elemento es una línea tal y como la interpreta la función open(), que en este caso es un salto de línea (\n).
Este bloque también usa la función strip(), que elimina espacios en blanco adicionales antes y después de cada objeto (o línea).
with open(filename) as file:
lines = [line.strip() for line in file]
Salida:

Como ves, la salida es una única lista en la que cada elemento es un párrafo. A diferencia de los ejemplos con pandas y NumPy, aquí tenemos tres objetos porque el texto original tiene dos saltos de línea entre párrafos.
Escribir archivos de texto en Python
Ahora que ya hemos visto cómo importar archivos de texto en Python, vamos a ver cómo escribirlos. Al escribir archivos nos referimos a guardar archivos de texto en tu equipo desde Python. Es especialmente útil cuando has manipulado texto en Python y quieres guardar el resultado.
Escribir archivos de texto con el método integrado write()
Puedes escribir archivos de texto en Python con el método integrado write(). También requiere usar open() y un gestor de contexto con la palabra clave with. Veámoslo con un ejemplo:
with open("new_nlp_wiki.txt", "w") as file:
file.write("New wiki entry: ChatGPT")
En este ejemplo, abrimos un archivo llamado new_nlp_wiki.txt en modo escritura (el argumento 'w'), lo que implica que se sobrescribe cualquier contenido previo. Luego llamamos al método write() del objeto file para escribir la cadena “New wiki entry: ChatGPT” en el archivo.
Si quieres añadir texto a un archivo existente en lugar de sobrescribirlo, ábrelo en modo append (el argumento 'a') así:
with open("new_nlp_wiki.txt", "a") as file:
file.write("New wiki entry: ChatGPT")
Escribir archivos de texto con el método to_csv() de pandas
Probablemente, la forma más sencilla de escribir un archivo de texto con pandas es usando el método to_csv(). ¡Vamos a verlo en acción!
nlp_wiki = pd.read_table("nlp_wiki.txt", header=None, delimiter=None)
nlp_wiki.to_csv("nlp_wiki_pandas.txt", sep="\t", index=False)
En la primera línea, leemos un archivo de texto con el método read_table() como se explicó antes. Después guardamos el archivo con to_csv(), indicando como separador un tabulador ('\t') y estableciendo el argumento index en False para no incluir el índice de filas en la salida.
Resumen
¡Esperamos que te haya gustado este tutorial! A modo de resumen, esto es lo que hemos visto:
- Importar texto con pandas y NumPy en Python
- Escribir archivos de texto con las funciones integradas de Python y con pandas
- Recursos adicionales: leer archivos CSV y web scraping en Python
- Si te ha gustado trabajar con texto, echa un vistazo al curso Introduction to Importing Data in Python.