Sé que esto parece convirtiera fácilmente, y supongo que el problema es que simplemente no tienen una comprensión clara de todo esto bytes-str-Unicode (y codificación-decodificación, hablando francamente) cosas todavía.Decode cadena de base 64 en Python 3 (con lxml o no)
He intentado que mi código de trabajo se ejecute en Python 3. La parte a la que me ato es cuando analizo un XML con lxml
y decodizo una cadena de base64 que está en ese XML.
El código ahora funciona de la siguiente manera:
puedo recuperar los datos binarios con una consulta XPath '.../binary/text()'
. Esto produce una lista de un elemento que contiene un objeto lxml.etree._ElementUnicodeResult
. Luego, con el pitón 2, que era capaz de hacer:
decoded = source.decode('base64')
y finalmente
output = numpy.frombuffer(decoded)
Sin embargo, el pitón 3 aparece un mensaje de error que dice
AttributeError: 'lxml.etree._ElementUnicodeResult' object has no attribute 'decode'
Esto no es tan sorprendente, porque lxml.etree._ElementUnicodeResult
es una subclase de str
.
Otra forma sería la de obtener un verdadero str
con los mismos datos en ella con
binary = tree.xpath('//binary')[0]
binary_string = binary.text
Eso sería esencialmente el mismo. Entonces, ¿qué debo hacer para descifrarlo desde base64? He mirado el módulo base64
, pero se necesita un objeto bytes
como argumento, y no puedo pensar en la forma de presentar str
como , porque si trato de construir un objeto bytes
, Python intentará codificar la cadena, que no necesito.
buscar en Google más, me encontré con el módulo binascii
(que se invoca indirectamente de base64
todos modos, si no me equivoco), pero llamar binascii.b2a_base64()
en mi cadena produce
TypeError: 'str' does not support the buffer interface
P. S. Incluso encontré una pregunta respondida en how to decode a hex string in Python 3, pero esto se hace con un método dedicado bytes.fromhex()
, así que no veo cómo sería útil.
¿Podría alguien decirme lo que me estoy perdiendo? Me temo que la mayor parte de la publicación es irrelevante y solo agrava mi vergüenza, pero al menos ustedes saben what I tried.
Como nota aparte, Ned Batchelder tiene una gran presentación en este material de bytes-str-unicode: [Unicode pragmático, o: ¿Cómo detengo el dolor?] (Http://nedbatchelder.com/text/unipain.html) – delnan
Gracias @delnan, estoy a la mitad y realmente ayuda mucho :) –