A menudo encontramos una letra b al inicio de una cadena y esta se presenta a continuación entre comillas simples:

b‘-rw-rw-r– 1 nuse nuse 44790 ago 28 16:10 b6e35f9a4086227a2afd7c6a07f66cf6.jpg\n’ ¿Porque se muestra en ese formato? ¿Que indica esa b? 😮 wtf???  😉

Esa b indica que el contenido está en bytes.

De hecho si hacemos print():

print(line)

b'-rw-rw-r-- 1 nuse nuse 44790 ago 28 16:10 b6e35f9a4086227a2afd7c6a07f66cf6.jpg\n'

Pero si por ejemplo, intentamos concatenar, nos dirá que debe ser str no bytes:

print("linea: " + line)

TypeError: must be str, not bytes

La documentación de Python viene a decir: Los literales Bytes siempre son precedidos por  ‘b’ o ‘B’. Solo contienen caracteres ASCII, los valores mayores de 128 son representados como secuencias de escape. (\n, \r, …)

Ok, ¿como trabajo con estas cadenas de Bytes?

Si tenemos bytes podemos convertir a string con decode indicando el tipo, el más habitual utf-8.

Veamos un ejemplo, de bytes a string

Si tenemos bytes en python podemos utilizar decode().

bytes = b'altaruru'
print(bytes)
print(bytes.decode("utf-8"))
  • Esta expresión b»altaruru» y esta «altaruru».encode(«utf-8») hacen lo mismo, pasan la cadena entre comillas a utf-8.b»altaruru» == «altaruru».encode(«utf-8»)

Ejecutamos y tenemos la siguiente salida:

b'altaruru'
altaruru
Y a la inversa, de string a bytes

Las cadenas/string se codifican con encode()

sstring = "altaruru"
print(sstring)
print(sstring.encode("utf-8"))
  • En esta ocasión, tenemos una cadena y con encode se codifica para pasarla a bytes.

Ejecutamos y tenemos la siguiente salida:

altaruru
b'altaruru'

¿Y todo esto para qué?

Habrá ocasiones que sea necesario realizar la conversión hacia un tipo u otro, dependerá de donde o quien nos facilite el dato.

 

Espero haya quedado más o menos claro.

Saludos.

Referencias

Deja tu comentario