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.