Cómo leer el contenido de ficheros de texto y binarios con Python. Usaremos la función open() de Python y mostraremos varios ejemplos de lectura de ficheros. Usamos captura de errores para mostrar, de forma controlada, un posible error en la apertura del fichero. Para los ficheros binarios, desarrollamos un script Python de ejemplo para leer y mostrar los 200 primeros bytes y otro para mostrar los 200 últimos bytes.

Función open() en Python para leer y escribir ficheros

En Python, los ficheros se tratan como objetos mediante la función open(). Esta función tiene la siguiente sintaxis:

Indicamos los argumentos más importantes y más usados de la función open():

  • file: es el único argumento obligatorio. En este argumento indicaremos el nombre (la ruta y nombre) del fichero a leer o a escribir. Si no se indica la ruta (carpeta), Python buscará el fichero en la carpeta donde se esté ejecutando el programa.
  • mode: este parámetro define el tipo de acceso al fichero, los posibles valores:
    • r: abre el fichero en modo lectura. Es el valor por defecto si no se indica este argumento.
    • r+: para abrir el fichero en modo lectura y escritura.
    • w: abre el fichero en modo escritura, trunca primero el fichero, para sobrescribir el contenido.
    • a: abre el fichero en modo escritura, si ya existe, añadirá al finl del fichero.
    • x: abre el archivo para creación exclusiva. Devolverá error si el fichero ya existe.
    • b: abre el archivo en modo binario.
    • t: abre el archivo en modo texto (es el valor por defecto si no se indica este argumento).
    • +: si se añade este carácter, abre un fichero en disco para actualizar (lectura o escritura).

Leer ficheros de texto con Python

Para la lectura del contenido de archivos pueden usarse los métodos:

  • read(cantidad): leerá una cantidad de datos especificada del archivo. Si «cantidad» se omite o se introduce una cantidad negativa, se leerá todo el contenido del fichero. Hay que tener precaución con esto si queremos leer ficheros de contenido muy extenso, dado que se podría colapsar el equipo.
  • readline: leerá una línea del fichero, hasta encontrar el carácter fin de línea \n.
  • readlines: lee todas las líneas de un fichero y las guarda en una variable de memoria de tipo lista. Hay que tener precaución con este método para ficheros muy extensos.

A continuación, vamos a probar alguno de estos métodos en ejemplos reales.

Supongamos que tenemos un fichero de texto plano con el siguiente contenido:

El fichero tiene el nombre «facturas.txt» y se encuentra en la carpeta:

D:\Mis documentos\ProyectoA\Python\Ficheros

Leer ficheros de texto en Python con readline()

Vamos a leer y mostrar por consola el contenido completo de este fichero mediante una aplicación Python, usando el método readline(), tendrá el siguiente código:

La ejecución del código Python anterior devolverá:

Factura de cliente 1: 1.200,45 euros
Factura de cliente 2: 200,05 euros
Factura de cliente 3: 2.400,50 euros
Total importe facturas: 3.801 euros

Leer ficheros de texto en Python con readlines()

Para el mismo caso que en el ejemplo anterior, pero usando el método readlines(), el código Python sería:

Y el resultado sería el mismo.

Leer ficheros de texto en Python con read()

Y el mismo ejemplo, pero usando el método read():

El resultado será el mismo que en los casos anteriores. Pero si usamos un límite de bytes, por ejemplo 60, quedando el código de la siguiente forma:

En este caso, devolverá el contenido truncado, solo los primeros 60 bytes:

Factura de cliente 1: 1.200,45 euros
Factura de cliente 2: 2

Leer ficheros de texto en Python con seek (desplazamiento de cursor) y readline()

Python también permite leer partes del fichero usando punteros (indicando desde dónde leer y hasta donde), para ello podemos usar el método seek(offset, whence). Por ejemplo, si disponemos del fichero anterior facturas.txt, y usamos el siguiente código (con el método seek():

Como indicamos en los comentarios del código, con readlines() mostrará la primera línea del fichero, con seek(22) desplazaremos el cursor a la posición 22 del fichero, empezando desde la posición 0 (desde el principio), que es en la que aparece el importe de la primera línea y mostramos la línea a partir de esa posición, nuevamente con readlines().

El código anterior devolverá:

Factura de cliente 1: 1.200,45 euros
1.200,45 euros

Podremos desplazar el cursor haca atrás en el fichero usando un valor negativo en seek(valor) o desplazar el cursor al principio del fichero, con seek(0).

Otra forma más de leer ficheros de texto línea a línea con Python

Otro ejemplo de lectura de ficheros con Python, línea a línea:

O también:

Leer ficheros binarios con Python

Leer los primeros 200 bytes de un fichero binario con Python

Un ejemplo de lectura de un fichero binario (un fichero .pdf), que mostrará los 200 primeros bytes del fichero:

El código Python anterior devolverá:

Si ejecutamos el script Python anterior para un fichero binario de tipo imagen PNG, devolverá:

Para un fichero binario de tipo zip (fichero comprimido), devolverá:

Otro ejemplo de salida para un fichero de tipo imagen jpeg, devolverá:

Un fichero .mp4 (música, vídeo), devolverá:

Un fichero .epub (libro electrónico):

Un fichero Word (.docx):

Para un ejecutable .exe:

Lectura de los últimos 200 bytes de un fichero binario en Python con seek, tell, read y os.SEEK_END

Otro ejemplo de lectura de ficheros binarios, usando los métodos seek(), tell(), read() y os.SEEK_END (de la librería os), que lee y muestra los últimos 200 bytes de un fichero binario:

Devolverá, para un fichero PDF:

Para un fichero .zip:

Para una imagen PNG:

Para un ejecutable .exe: