Solo publico esto para poder buscarlo más tarde, ya que siempre parece desconcertarme:
$ python3.2
Python 3.2 (r32:88445, Oct 20 2012, 14:09:50)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print(curses.version)
b'2.2'
>>> print(str(curses.version))
b'2.2'
>>> print(curses.version.encode('utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
>>> print(str(curses.version).encode('utf-8'))
b"b'2.2'"
Como pregunta: ¿cómo imprimir una bytes
cadena binaria ( ) en Python 3, sin el b'
prefijo?
python
string
python-3.x
sdaau
fuente
fuente
Respuestas:
Utilizar
decode
:fuente
utf-8
por defecto? No quiero usar el.decode('utf-8')
cada vez que imprimo algo.curses.version
no sea NingunoSi los bytes ya utilizan una codificación de caracteres adecuada; puedes imprimirlos directamente:
o
fuente
Si echamos un vistazo a la fuente de
bytes.__repr__
, parece queb''
está integrado en el método.La solución alternativa más obvia es cortar manualmente
b''
el resultado del resultadorepr()
:fuente
repr(x)[2:-1]
, produce unstr
objeto que se imprimirá como desee. En particular,repr(b'\x01')[2:-1]
devuelve la cadena\\x01
, mientrasdecode()
que devolverá\x01
que no funciona como uno desearíaprint()
. Para ser aún más explícito,print(repr(b'\x01')[2:-1])
imprimirá\x01
mientrasprint(b'\x01'.decode())
que no imprimirá nada.print(repr(b"\x01".decode()))
imprimirá'\x01'
(una cadena que incluye las comillas simples), de modo queprint(repr(b"\x01".decode())[1:-1])
imprima\x01
(una cadena sin las comillas simples).Si los datos están en un formato compatible con UTF-8, puede convertir los bytes en una cadena.
Opcionalmente, convierta primero a hexadecimal, si los datos aún no son compatibles con UTF-8. Por ejemplo, cuando los datos son bytes sin procesar reales.
fuente