Cómo leer archivos de texto extremadamente grandes utilizando Python

Permíteme que comience directamente con la pregunta, ¿realmente necesitamos Python para leer archivos de texto de gran tamaño? ¿No estaría mejor utilizar nuestro procesador de texto normal o nuestro editor de texto de toda la vida para eso? Cuando habla de ficheros grandes, me refiero a archivos que pesan muchísimo.

Bueno, vamos a ver ciertas evidencias sobre si sería necesario Python para leer este tipo de ficheros o no.

El archivo

Con el fin de llevar a cabo nuestro experimento, necesitamos un archivo de texto muy grande. En este tutorial, cogeremos un archivo de la web de descargas de la UCSC Genome Bioinformatics. El archivo que vamos a utilizar, en particular, es el archivo hg38.fa.gz, que, como te hemos dicho anteriormente, es un archivo muy pesado.

Así que vamos a empezar descargando el fichero hg38.fa.gz (por favor ten cuidado, el archivo pesa 938 MB). Puedes usar 7-zip para descomprimir el archivo, o cualquier otra herramienta para descomprimir ficheros.

Después de descomprimir el archivo, obtendrás un archivo llamado hg38.fa. Cambiar el nombre a hg38.txt para obtener un archivo de texto.

Abriendo el archivo de manera tradicional

Lo que quiero decir con “de forma tradicional” es mediante el uso de un procesador de texto o de un editor de texto para abrir archivos. Vamos a ver lo que sucede cuando tratamos de hacer esto.

Al abrir el archivo de texto mediante Microsoft Word obtuve el siguiente mensaje:

También probé a abrir el archivo utilizando WordPad y el bloc de notas de Windows, pero desgraciadamente, tampoco funcionó. Al final lo logré utilizando TextEdit en una máquina Mac OS X.

Leyendo archivos de texto utilizando Python

En esta sección, vamos a ver cómo podemos leer nuestro archivo de gran tamaño utilizando Python. Digamos que queremos leer las primeras 500 líneas de nuestro archivo de texto grande. Simplemente, podemos hacer lo siguiente:

input_file = open('hg38.txt','r')
output_file = open('output.txt','w')
 
for lines in range(500):
    line = input_file.readline()
    output_file.write(line)

Date cuenta que estamos leyendo 500 líneas de hg38.txt, línea por línea, y escribiéndolas de nuevo en el archivo de texto output.txt, que debe ser similar al mostrado en este archivo.

Pero, ¿por qué hacemos esto? Pues porque es la manera más flexible de poder leer un extracto de un archivo de texto extremadamente grande. Es decir, extraemos las líneas de texto que queremos leer, en este caso 500, y las introducimos en otro fichero vacío, el cual podremos manejar sin problemas.

Navegando dentro de archivos de gran tamaño

Aunque en el paso anterior hemos podido leer un archivo de texto extrayendo unas cuantas líneas de dicho fichero grande y enviándolas a otro archivo de texto vacío, navegar directamente a través del fichero pesado sin necesidad de extraerlo línea por línea es una mejor idea.

Simplemente, puedes hacerlo utilizando Python para leer el archivo de texto a través de la pantalla del terminal de la siguiente manera (obteniendo 50 líneas del archivo cada vez que se presiona ENTER):

input_file = open('hg38.txt','r')
 
while(1):
    for lines in range(50):
        print input_file.readline()
    user_input = raw_input('Type STOP to quit, otherwise press the Enter/Return key ')
    if user_input == 'STOP':
        break

Como puedes ver en este script, ahora puedes leer y navegar por el archivo de texto grande utilizando tu terminal. Cada vez que desees parar, sólo tiene que teclear STOP (en mayúsculas) en tu terminal.

Con esto queda demostrado que con unas cuantas líneas de código podemos hacer soluciones que también nos valgan a nosotros como usuarios. Hemos pasado de tener un gran problema, al no poder abrir ficheros enormes en editores de texto, a poder navegar por dichos ficheros mediante un sencillo script de nos más de 10 líneas. Increíble, ¿verdad? Pues todo ha sido gracias a Python.

Fuente: Abder-Rahman Ali

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP