Module (90%)
Section (94%)

Bytearrays: continuación

Entonces, ¿cómo escribimos un arreglo de bytes en un archivo binario?

Observa el código en el editor. Analicémoslo:

  • Primero, inicializamos bytearray con valores a partir de 10; si deseas que el contenido del archivo sea claramente legible, reemplaza el 10con algo como ord('a'), esto producirá bytes que contienen valores correspondientes a la parte alfabética del código ASCII (no pienses que harás que el archivo sea un archivo de texto; sigue siendo binario, ya que se creó con un indicador - bandera wb).
  • Después, creamos el archivo usando la función open(), la única diferencia en comparación con las variantes anteriores es que el modo de apertura contiene el indicador b.
  • El método write() toma su argumento (bytearray) y lo envía (como un todo) al archivo.
  • El stream se cierra de forma rutinaria.

El método write() devuelve la cantidad de bytes escritos correctamente.

Si los valores difieren de la longitud de los argumentos del método, puede significar que hay algunos errores de escritura.

En este caso, no hemos utilizado el resultado; esto puede no ser apropiado en todos los casos.

Intenta ejecutar el código y analiza el contenido del archivo recién creado.

Lo vas a usar en el siguiente paso.


Cómo leer bytes de un stream

La lectura de un archivo binario requiere el uso de un método especializado llamado readinto(), ya que el método no crea un nuevo objeto del arreglo de bytes, sino que llena uno creado previamente con los valores tomados del archivo binario.

Nota:

  • El método devuelve el número de bytes leídos con éxito.
  • El método intenta llenar todo el espacio disponible dentro de su argumento; si existen más datos en el archivo que espacio en el argumento, la operación de lectura se detendrá antes del final del archivo; el resultado del método puede indicar que el arreglo de bytes solo se ha llenado de manera fragmentaria (el resultado también lo mostrará y la parte del arreglo que no está siendo utilizada por los contenidos recién leídos permanece intacta).

Mira el código completo a continuación:

from os import strerror data = bytearray(10) try: bf = open('file.bin', 'rb') bf.readinto(data) bf.close() for b in data: print(hex(b), end=' ') except IOError as e: print("Se produjo un error de E/S: ", strerr(e.errno))

Analicémoslo:

  • Primero, abrimos el archivo (el que se creó usando el código anterior) con el modo descrito como rb.
  • Luego, leemos su contenido en el arreglo de bytes llamado data, con un tamaño de diez bytes.
  • Finalmente, imprimimos el contenido del arreglo de bytes: ¿Son los mismos que esperabas?

Ejecuta el código y verifica si funciona.



Code

from os import strerror

data = bytearray(10)

for i in range(len(data)):
data[i] = 10 + i

try:
bf = open('file.bin', 'wb')
bf.write(data)
bf.close()
except IOError as e:
print("Se produjo un error de E/S: ", strerr(e.errno))



# ingresa aquí el código que lee los bytes del stream
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×