bytes - codecs python 3
¿Hay un literal de cadena de bytes con formato en Python 3.6+? (3)
Desde Python 3.6.2, este formato de porcentaje para bytes funciona:
print(b"Some stuff %a. Some other stuff" % my_byte_or_unicode_string)
Estoy buscando un literal de cadena de bytes con formato. Específicamente, algo equivalente a
name = "Hello"
bytes(f"Some format string {name}")
Posiblemente algo como fb"Some format string {name}"
.
¿Existe tal cosa?
Este fue uno de los cambios más grandes realizados desde Python 2 a Python3. Manejan unicode y cadenas de manera diferente.
Así es como convertirías a bytes.
string = "some string format"
string.encode()
print(string)
Así es como se decodificaría una cadena.
string.decode()
Aprecié mejor la diferencia entre el cambio de Python 2 y el cambio de 3 a Unicode a través de esta conferencia de coursera por Charles Severence. Puede ver el video completo de 17 minutos o avanzar rápidamente a algún lugar alrededor de las 10:30 si desea conocer las diferencias entre Python 2 y 3 y cómo manejan los caracteres y, específicamente, los Unicode.
Entiendo que su pregunta real es cómo podría formatear una cadena que tiene tanto cadenas como bytes.
inBytes = b"testing"
inString = ''Hello''
type(inString) #This will yield <class ''str''>
type(inBytes) #this will yield <class ''bytes''>
Aquí se puede ver que tengo una cadena de una variable y una variable de bytes.
Así es como combinarías un byte y una cadena en una cadena.
formattedString=(inString + '' '' + inBytes.encode())
No. La idea es descartada explícitamente en el PEP :
Por la misma razón por la que no
bytes.format()
, no puede combinar''f''
con''b''
literales de cadena''b''
. El problema principal es que el__format__()
un objeto puede devolver datos Unicode que no son compatibles con una cadena de bytes.Las cadenas de caracteres binarias primero requerirían una solución para
bytes.format()
. Esta idea ha sido propuesta en el pasado, más recientemente en PEP 461 . Las discusiones de tal característica usualmente sugieren ya sea
agregando un método como
__bformat__()
para que un objeto pueda controlar cómo se convierte a bytes, otener
bytes.format()
no debe ser tan general ni extensible comostr.format()
.Ambos se mantendrán como opciones en el futuro, si se desea dicha funcionalidad.