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 ampliar la funcionalidad para permitir la escritura en datos Unicode.

Módulo de E/S de Python

Existen muchas formas en las que podemos usar el módulo io para realizar operaciones de flujo y buffer en Python. Aquí demostraremos muchos ejemplos para demostrarlo. Comencemos.

BytesIO de Python

Al igual que lo que hacemos con las variables, los datos se pueden guardar como bytes en un búfer en memoria cuando utilizamos las operaciones Byte IO del módulo io. Aquí hay un programa de ejemplo para demostrar esto:

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

Veamos la salida de este programa: La getvalue()función simplemente toma el valor del Buffer como una cadena.

Cadena de caracteres de Python

También podemos utilizar StringIOas well, que es extremadamente similar en su 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 el resultado de este programa: Observe que incluso cerramos el búfer después de terminar con él. Esto ayuda a ahorrar memoria del búfer, ya que almacenan datos en la memoria. Además, usamos el método print con un argumento opcional para especificar un flujo de E/S de la variable, lo cual es perfectamente compatible con una declaración print.

Lectura mediante StringIO

Una vez que escribimos algunos datos en el búfer 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 el resultado de este programa:

Lectura de archivos mediante StringIO

También es posible leer un archivo y transmitirlo a través de una red como bytes. El módulo io se puede utilizar para convertir un archivo multimedia, como una imagen, en bytes. A continuación se muestra un programa de ejemplo:

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

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

Comparación entre io.open() y os.open()

La io.open()función 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 de nivel de SO en un objeto que podemos usar para acceder al archivo de forma Pythonic. La os.open()función 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()funciones. En general, io.open()la función es solo un contenedor sobre os.open()la función. La os.open()función también establece la configuración predeterminada como indicadores y modo también, mientras que io.open() no lo hace y depende de los valores que se le pasan.

Conclusión

En esta lección, estudiamos operaciones simples del módulo IO de Python y cómo podemos administrar los caracteres Unicode con BytesIO también. Sin embargo, si está buscando operaciones de archivo completas, como eliminar y copiar un archivo, lea Python read file . Referencia: Documentación de API

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

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

Scroll al inicio