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.
- Leer ficheros de texto con Python.
- Leer ficheros binarios con Python.
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:
1 |
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) |
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:
1 2 3 4 |
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 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\facturas.txt" # Añadimos el argumento mode="r" para indicar que abrimos el archivo en modo lectura # Usamos el argumento "encoding" para indicar que el archivo tiene codificación utf-8 # de forma que si contiene tildes, eñes, etc, las mostrará correctamente fichero = open(rutaFichero, mode="r", encoding="utf-8") # Recorremos cada línea del fichero y la vamos mostrando en consola while linea := fichero.readline(): print(linea, end="") # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\facturas.txt" # Añadimos el argumento mode="r" para indicar que abrimos el archivo en modo lectura # Usamos el argumento "encoding" para indicar que el archivo tiene codificación utf-8 # de forma que si contiene tildes, eñes, etc, las mostrará correctamente fichero = open(rutaFichero, mode="r", encoding="utf-8") # Leemos todas las líneas del fichero en una variable lineas = fichero.readlines() # Recorremos la lista y mostramos las líneas por consola for linea in lineas: print(linea, end="") # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
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():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\facturas.txt" # Añadimos el argumento mode="r" para indicar que abrimos el archivo en modo lectura # Usamos el argumento "encoding" para indicar que el archivo tiene codificación utf-8 # de forma que si contiene tildes, eñes, etc, las mostrará correctamente fichero = open(rutaFichero, mode="r", encoding="utf-8") # Guardamos todo el contenido del fichero en una variable # Si no indicamos la cantidad de bytes a leer, leerá todo el contenido lineas = fichero.read() # Recorremos la variable, suponiendo que contiene todas las líneas # y mostramos las líneas por consola for linea in lineas: print(linea, end="") # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\facturas.txt" # Añadimos el argumento mode="r" para indicar que abrimos el archivo en modo lectura # Usamos el argumento "encoding" para indicar que el archivo tiene codificación utf-8 # de forma que si contiene tildes, eñes, etc, las mostrará correctamente fichero = open(rutaFichero, mode="r", encoding="utf-8") # Guardamos todo el contenido del fichero en una variable # Indicamos 60 bytes a leer del fichero lineas = fichero.read(60) # Recorremos la variable, suponiendo que contiene todas las líneas # y mostramos las líneas por consola for linea in lineas: print(linea, end="") # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
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():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
try: # Abrimos el fichero facturas.txt en modo lectura with open("facturas.txt", mode="r") as fichero: # Mostramos la primera línea (desde el principio del fichero) con readline() print(fichero.readline(), end="") # Cambiamos la posición del cursor a la 22 # Que es donde se encuentra el importe de la primera línea fichero.seek(22) # Mostramos la primera línea pero a partir de la nueva posición print(fichero.readline(), end="") # Cerramos el fichero fichero.close() except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\facturas.txt" # Añadimos el argumento mode="r" para indicar que abrimos el archivo en modo lectura # Usamos el argumento "encoding" para indicar que el archivo tiene codificación utf-8 # de forma que si contiene tildes, eñes, etc, las mostrará correctamente fichero = open(rutaFichero, mode="r", encoding="utf-8") # Recorremos cada línea del fichero y la vamos mostrando en consola for linea in fichero: print(linea, end="") # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
O también:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\facturas.txt" # Añadimos el argumento mode="r" para indicar que abrimos el archivo en modo lectura # Usamos el argumento "encoding" para indicar que el archivo tiene codificación utf-8 # de forma que si contiene tildes, eñes, etc, las mostrará correctamente #fichero = open(rutaFichero, "r", encoding="utf-8") # Recorremos cada línea del fichero y la vamos mostrando en consola with open("facturas.txt", mode="r") as fichero: for linea in fichero: print(linea, end="") # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\fichero.pdf" # Añadimos el argumento mode="rb" para indicar que abrimos el archivo en modo lectura y de tipo binario fichero = open(rutaFichero, mode="rb") # Leemos los primeros 200 bytes del fichero y los almacenamos en la variable datosBinarios = fichero.read(200) # Obtenemos y mostramos el tipo de datos del fichero print("Los datos son de tipo: " + str(type(datosBinarios))) # Mostramos el contenido completo (en secuencia de datos binarios) print("Los 200 primeros bytes del fichero:") print(datosBinarios) # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
El código Python anterior devolverá:
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'%PDF-1.7\n\n4 0 obj\n(Identity)\nendobj\n5 0 obj\n(Adobe)\nendobj\n8 0 obj\n<<\n/Filter /FlateDecode\n/Length 218091\n/Length1 606420\n/Type /Stream\n>>\nstream\nx\x9c\xec\xbd\x07|\\\xc5\xf5/>s\xef\xf6\xde\xb5E\xab\xdd\xd5jWe\xd5\xbbdYZ\xabW\xcb\xb2,[\xb2-[\xb2\x8amX\xe3\x8e\x8d\x1b\x06\x83\x01\xd1\x83\x81\x18\x08%' |
Si ejecutamos el script Python anterior para un fichero binario de tipo imagen PNG, devolverá:
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xee\x00\x00\x01&\x08\x06\x00\x00\x00=N\x15\x8e\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\tpHYs\x00\x00\x16%\x00\x00\x16%\x01IR$\xf0\x00\x00\x0e$IDATx^\xed\xdd\xdb\x97^\xe5]\xc0q\xff\x10\x0bB\xe6\x989e\x0e\x99\x99d&3I&\x132\x19\x0eB\x12iJL\x81\xd8tAih\r\x18@L\x0fR\x08\x14\x12\x0e\x82\xb4i)\x90p,I\xa0\xa5\xadm-\xdaZ\xdb\xaa\xb8\xac\xa2`+v\tb\x91Vo]\xcb\xab\x9f\xef\xb3\xc3\x849\xbc\x93\xd0EV\xd6\xfc\x9c\xcf\xc5\xe7j\x9e\xfd\xbe\xef\xe5w?\xf3' |
Para un fichero binario de tipo zip (fichero comprimido), devolverá:
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'PK\x03\x04\x14\x00\x00\x00\x08\x00\xe5nnX\xbd\x96\x01\x96\x106\x0f\x00\x16(\x10\x001\x00\x00\x00Facturas_stock_almacen.pdf\xb4\xb7\x03l.@\xfb\xf6Y\xdb8\xb5m\xdb\xb6\xddS\xdb6\x9fZO\xdd\x9e\xda\xb6m\xdb:\xb5\xddS\x9b\xfb~\xff\x0f\xd9,\x92\xcdf7\xf9Mr\xdd\xf7$3\x93\x99+\xf7\xccP(\x8bK2\xb00r\xc1\xc1\xb1\x133\x13;\x9a\xd8\xc0Q\xcb\x98\x99;\xb8Y\xbby\xd3\xc0\x99;\x98\xfd\xb7\x0c\xc7\xff\xec\x11\xf9Oh\xfe\xbf\xd2\xdc\xff#\xcd\xcf\x0f\xc7$im\xe7f\xeeB\xcc$ig\xecf.' |
Otro ejemplo de salida para un fichero de tipo imagen jpeg, devolverá:
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00\x90\x00\x90\x00\x00\xff\xe1\x00"Exif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x01\x01\x12\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\xff\xdb\x00C\x00\x02\x01\x01\x02\x01\x01\x02\x02\x02\x02\x02\x02\x02\x02\x03\x05\x03\x03\x03\x03\x03\x06\x04\x04\x03\x05\x07\x06\x07\x07\x07\x06\x07\x07\x08\t\x0b\t\x08\x08\n\x08\x07\x07\n\r\n\n\x0b\x0c\x0c\x0c\x0c\x07\t\x0e\x0f\r\x0c\x0e\x0b\x0c\x0c\x0c\xff\xdb\x00C\x01\x02\x02\x02\x03\x03\x03\x06\x03\x03\x06\x0c\x08\x07\x08\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\xff\xc0\x00\x11\x08\x01' |
Un fichero .mp4 (música, vídeo), devolverá:
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'\x00\x00\x00\x14ftypmp41 \x13\x10\x18mp410\x94\x13\x8fmdatGPROl\x02\x00\x00HD8.01.02.51.00C3343224870197\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x1f5\xf0\x9c\xcd\xa4J}\xc5\xe6I8+\x9evC3331324821478\x00HERO8 Black\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x01\xc2\xb3E\x10\x00\xaf\x1f5\xf0\x9c\xcd\xa4J}\xc5\xe6I8+\x9ev\xcb4\xe8\x07\xad\t\x00\x00\x00\x00\xd3\t\x00\x00\x00\x00 |
Un fichero .epub (libro electrónico):
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'PK\x03\x04\x14\x00\x00\x08\x00\x001\xa4iWoa\xab,\x14\x00\x00\x00\x14\x00\x00\x00\x08\x00\x00\x00mimetypeapplication/epub+zipPK\x03\x04\x14\x00\x00\x08\x08\x00cLgWc\x15\xbe\xe5}\x00\x00\x00\xaa\x00\x00\x00-\x00\x00\x00META-INF/com.apple.ibooks.display-options.xmle\x8c1\x0e\xc20\x0cEwN\x11yD*\x85\x8d!i7NPf\x145\x0e\x8a\x94\xd8Q\x1d\x10\xbd=F\x85\x89\xed\xfb\xf9\xfdo\xc7W\xc9\xe6\x89\x8b$&\x07\xa7\xc3\x11\x0c\xd2\xcc!\xd1\xdd\xc1u\xbatg0\xd2<' |
Un fichero Word (.docx):
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x002\x91oWf\x01\x00\x00\xa5\x05\x00\x00\x13\x00\x08\x02[Content_Types].xml \xa2\x04\x02(\xa0\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |
Para un ejecutable .exe:
1 2 3 |
Los datos son de tipo: <class 'bytes'> Los 200 primeros bytes del fichero: b'MZ\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x0e\x1f\xba\x0e\x00\xb4\t\xcd!\xb8\x01L\xcd!This program cannot be run in DOS mode.\r\r\n$\x00\x00\x00\x00\x00\x00\x00PE\x00\x00L\x01\x07\x00Hn\x95W\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x0f\x03\x0b\x01\x028\x00\x82\x00\x00\x00>\x00\x00\x00\xac\x02\x00]:\x00\x00\x00\x10\x00\x00\x00\xa0\x00\x00\x00\x00@\x00\x00\x10\x00\x00\x00\x02\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00' |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import os try: # Abrimos el fichero en modo lectura # Añadimos "r" al principio para indicar que es una ruta y que sirvan las barras invertidas rutaFichero = r"D:\Mis documentos\ProyectoA\Python\Ficheros\fichero.pdf" # Abrimos el fichero para lectura en modo binario with open(rutaFichero, "rb") as fichero: # Posicionamos el cursor en el último byte del fichero fichero.seek(0, os.SEEK_END) # Obtenemos el tamaño del fichero, que es la posición del cursor actual (el último byte) tamano = fichero.tell() # Si el tamaño es superior a 200 bytes, posicionamos el cursor 200 bytes antes del final if tamano > 200: fichero.seek(tamano - 200) else: # Si el tamaño es inferior a 200 bytes, mostramos los últimos 10 bytes fichero.seek(tamano - 10) # Mostramos los últimos bytes del fichero ultimosBytes = fichero.read() print(ultimosBytes) # Cerramos el fichero fichero.close except Exception as e: # Se se produce un error al intentar abrir el fichero, lo capturamos y lo mostramos print(f"Se ha producido un error al intentar abrir el fichero: {e}") |
Devolverá, para un fichero PDF:
1 |
b'00 n\r\n0000999388 00000 n\r\n0001044789 00000 n\r\n0000999706 00000 n\r\n0001043713 00000 n\r\n0001044660 00000 n\r\n0001056258 00000 n\r\ntrailer\n<<\n/Info 114 0 R\n/Root 1 0 R\n/Size 115\n>>\nstartxref\n1056452\n%%EOF\n' |
Para un fichero .zip:
1 |
b'\xb4\xe8s\x04\x1c\xeb\x84I\xd8\xf0\x14\xdes\x98p\x15~&\xb8w\xaf\x8d\xf2\x0c\xbf\xaau\xd2\xaa\xf0\xc8\xbd(\x17\xca\xf4\x9f\xe7}\x9b\xd7\xd7\xb2\x1dm\xdcqMtvv\xc7\\\xd8{\xbf\xfc\xe6\xe1\x9e\xebg\xe9\xbd\xd2y55o\xfb\xd1>\xf5\xc5\xa0x\xc3\xf5z{\xdc\x87/PK\x01\x02\x14\x00\x14\x00\x00\x00\x08\x00\xe5nnX\xbd\x96\x01\x96\x106\x0f\x00\x16(\x10\x001\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00Facturas_stock.pdfPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00_\x00\x00\x00_6\x0f\x00\x00\x00' |
Para una imagen PNG:
1 |
b'\x00\x00H@\xb8\x03\x00@\x02\xc2\x1d\x00\x00\x12\x10\xee\x00\x00\x90\x80p\x07\x00\x80\x04\x84;\x00\x00$ \xdc\x01\x00 \x01\xe1\x0e\x00\x00\t\x08w\x00\x00H@\xb8\x03\x00@\x02\xc2\x1d\x00\x00\x12\x10\xee\x00\x00\x90\x80p\x07\x00\x80\x04\x84;\x00\x00$ \xdc\x01\x00 \x01\xe1\x0e\x00\x00\t\x08w\x00\x00H@\xb8\x03\x00@\x02\xc2\x1d\x00\x00\x12\x10\xee\x00\x00\x90\x80p\x07\x00\x80\x04\x84;\x00\x00$ \xdc\x01\x00 \x01\xe1\x0e\x00\x00\t\x08w\x00\x00H@\xb8\x03\x00@\x02\xc2\x1d\x00\x00\x12\x10\xee\x00\x00\x90\x80p\x07\x00\x80\x04\x84;\x00\x00$ \xdc\x01\x00 \x01\xe1\x0e\x00\x00\t\x08w\x00\x00X\xf0\x1a\xe2\xff\x00\x1e\xe8\xf7L\x03\x1a]\xca\x00\x00\x00\x00IEND\xaeB`\x82' |
Para un ejecutable .exe:
1 |
b'8ui`o\xb9\x88\xc8w\xd2\xddp5\xf1\x9b\xf6\x91\xa6\xe6\xd1\x90\x94\t\xce\xf4\x8e\x07\xb8R\xa0\xd8h\xf2+\xe0 40_\xec*\xc0\xefOrT~\x1a\xa9ty\xeb\x93\xa2Q\x86\xdaa\xc3\xdb\xab\xe7\x06\xa5\xfc\xf5\t\x07y\xfb\xa0v\xfa\xfa\xe8:&\xfa/\xe3\xdd\xe8#\x83\xbc\xb3\x8c\x17rSa\rU\x8d.\x89(\xaf\xa0\x98\xa3z?{\x0bt\xfa\xf3e\xdb\x8c\xf4\x95./\xe7\xa0&o\xf3e\x0fA\x05\x80t\xd1\x8c=\xc2,\x1c\xd8il\x87CO\x14\xc0K\xf5u\xc8\xf8@f`\x02\xb2X^\xa6"\xf9\xba>\xc3[\xa0\xcfC\xe9Oy\x1e\xde\xb2{\xfeO|\x80\xfb\x93\xa5d)St*vc\xc7\x1a\xfe\xc2\x1fy\x88\xfa\xc8\xb7\xff\x00\x00\x00\x00\x00\x00' |