Python io – BytesIO, StringIO

El módulo io de Python nos permite gestionar las operaciones de entrada y salida relacionadas con archivos. La ventaja de utilizar el módulo io es que las clases y funciones disponibles nos permiten extender la funcionalidad para permitir la escritura en los datos Unicode.

Módulo io de Python

Hay muchas maneras en las que podemos utilizar el módulo io para realizar operaciones de flujo y búfer en Python. Aquí demostraremos un montón de ejemplos para probar el punto. Empecemos.

Python BytesIO

Al igual que lo que hacemos con las variables, los datos se pueden guardar como bytes en un buffer en memoria cuando utilizamos las operaciones Byte IO del módulo io.

Aquí tienes un programa de ejemplo para demostrarlo:

import iostream_str = io.BytesIO(b"JournalDev Python: \x00\x01")print(stream_str.getvalue())

Veamos la salida de este programa:
python IO BytesIO ejemplo
La función getvalue() sólo toma el valor del Buffer como String.

Python StringIO

Incluso podemos usar StringIO también que es extremadamente similar en uso a BytesIO. Aquí hay un programa de ejemplo:

import iodata = io.StringIO()data.write('JournalDev: ')print('Python.', file=data)print(data.getvalue())data.close()

Veamos la salida de este programa:
python StringIO example
Nota que incluso cerramos el buffer después de haber terminado con el buffer. Esto ayuda a ahorrar memoria en el buffer, ya que almacenan los datos en memoria.

Además, hemos utilizado el método print con un argumento opcional para especificar un flujo IO de la variable, lo que es perfectamente compatible con una sentencia print.

Lectura con StringIO

Una vez que escribimos algunos datos en el buffer StringIO, también podemos leerlos. Veamos un fragmento de código:

import ioinput = io.StringIO('This goes into the read buffer.')print(input.read())

Veamos la salida de este programa:
módulo io de python leer datos stringIO

Lectura de archivo usando StringIO

También es posible leer un archivo y transmitirlo por una red como Bytes. El módulo io se puede utilizar para convertir un archivo multimedia como una imagen a bytes. Aquí hay un programa de ejemplo:

import iofile = io.open("whale.png", "rb", buffering = 0)print(file.read())

Veamos la salida de este programa:

Para que este programa se ejecute, teníamos una imagen whale.png presente en nuestro directorio actual.

io.open() vs os.open()

La función io.open() es una forma muy preferida de realizar operaciones de E/S ya que está hecha como una interfaz de alto nivel para realizar E/S de archivos. Envuelve el descriptor de archivo a nivel del sistema operativo en un objeto que podemos utilizar para acceder al archivo de una manera pitónica.

La función os.open() se encarga de la llamada al sistema POSIX de nivel inferior. Toma argumentos de entrada basados en POSIX y devuelve un descriptor de archivo que representa el archivo abierto. No devuelve un objeto de archivo; el valor devuelto no tendrá funciones read() o write().

En general, la función io.open() es sólo una envoltura sobre la función os.open(). La función os.open() también establece la configuración por defecto como las banderas y el modo, mientras que io.open() no lo hace y depende de los valores que se le pasen.

Conclusión

En esta lección, hemos estudiado las operaciones simples del módulo IO de python y cómo podemos gestionar los caracteres Unicode con BytesIO también. Sin embargo, si estás buscando operaciones completas de archivos como borrar y copiar un archivo entonces lee python read file.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *