El módulo io de Python nos permite gestionar las operaciones de entrada y salida relacionadas con archivos. La ventaja de usar el módulo IO es que las clases y funciones disponibles nos permiten ampliar la funcionalidad para habilitar la escritura de datos Unicode.
Módulo IO de Python
Hay muchas formas en las que podemos utilizar el módulo io para realizar operaciones de flujo y búfer en Python. Aquí demostraremos muchos ejemplos para probar el punto. Comencemos.
BytesIO de Python
Al igual que lo que hacemos con variables, los datos pueden mantenerse como bytes en un búfer en memoria cuando usamos las operaciones Byte IO del módulo io. Aquí hay un programa de muestra para demostrar esto:
import io
stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())
Veamos la salida para este programa: La función
getvalue()
simplemente toma el valor del búfer como una cadena.
StringIO de Python
Incluso podemos usar StringIO
también, que es extremadamente similar en uso a BytesIO
. Aquí hay un programa de muestra:
import io
data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)
print(data.getvalue())
data.close()
Veamos la salida para este programa: Ten en cuenta que incluso cerramos el búfer después de haber terminado con él. Esto ayuda a ahorrar memoria de búfer ya que almacenan datos en la memoria. Además, utilizamos 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 instrucción de impresión.
Lectura usando StringIO
Una vez que escribimos algunos datos en el búfer StringIO, también podemos leerlos. Veamos un fragmento de código:
import io
input = io.StringIO('This goes into the read buffer.')
print(input.read())
Veamos la salida para este programa:
Lectura de archivo usando 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 a bytes. Aquí tienes un programa de ejemplo:
import io
file = io.open("whale.png", "rb", buffering = 0)
print(file.read())
Veamos la salida para 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 mucho más preferida de realizar operaciones de E/S ya que está diseñada como una interfaz de alto nivel para realizar E/S de archivos. Envuelve el descriptor de archivo a nivel de sistema operativo en un objeto que podemos usar para acceder al archivo de una manera “pythonica”. La función os.open()
se encarga de la llamada al sistema POSIX de nivel más bajo. Toma argumentos basados en POSIX como entrada 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 simplemente un envoltorio sobre la función os.open()
. La función os.open()
también establece la configuración predeterminada como banderas y modo mientras que io.open() no lo hace y depende de los valores pasados a ella.
Conclusión
En esta lección, estudiamos las operaciones simples del módulo IO de Python y cómo podemos manejar los caracteres Unicode con BytesIO también. Sin embargo, si estás buscando operaciones de archivo completas como eliminar y copiar un archivo, entonces lee python leer archivo. Referencia: Documentación de la API.
Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio