Dekoduj ciąg base64 w python 3 (z lxml lub nie)

Wiem, że wygląda to żenująco łatwo i myślę, że problem polega na tym, że po prostu nie rozumiem tego wszystkiegobajt-str-unicode (ikodowanie-dekodowanie, mówiąc szczerze) rzeczy jeszcze.

Próbowałem uruchomić mój działający kod na Pythonie 3. Częścią, z którą utknąłem, jest parsowanie XML zlxml i zdekodować łańcuch base64, który jest w tym XML.

Kod działa teraz w następujący sposób:

Pobieram dane binarne za pomocą zapytania XPath'.../binary/text()'. Spowoduje to utworzenie jednoelementowej listy zawierającej znaklxml.etree._ElementUnicodeResult obiekt. Następnie z pytonem 2 udało mi się:

<code>decoded = source.decode('base64')
</code>

i w końcu

<code>output = numpy.frombuffer(decoded)
</code>

Jednak w Pythonie 3 pojawia się komunikat o błędzie z informacją

<code>AttributeError: 'lxml.etree._ElementUnicodeResult' object has no attribute 'decode'
</code>

To nie jest takie zaskakujące, ponieważlxml.etree._ElementUnicodeResult jest podklasąstr.

Innym sposobem byłoby uzyskanie prawdziwościstr z tymi samymi danymi z

<code> binary = tree.xpath('//binary')[0]
 binary_string = binary.text
</code>

To byłoby zasadniczo takie samo. Co mam zrobić, aby zdekodować go z base64? Spojrzałem nabase64 moduł, ale trwabytes obiekt jako argument i nie mogę wymyślić sposobu przedstawieniastr tak jakbytes, ponieważ jeśli spróbuję skonstruowaćbytes obiekt, spróbuje Pythonkodować ciąg, którego nie potrzebuję.

Idąc dalej, natknąłem się nabinascii moduł (który jest wywoływany pośrednio zbase64 w każdym razie, jeśli się nie mylę), ale dzwoniębinascii.b2a_base64() na mojej strunie produkuje

<code>TypeError: 'str' does not support the buffer interface
</code>

P.S. Znalazłem nawet odpowiedź na pytaniejak zdekodować ciąg szesnastkowy w Pythonie 3, ale odbywa się to za pomocą dedykowanej metodybytes.fromhex() więc nie widzę, jak to byłoby pomocne.

Czy ktoś mógłby mi powiedzieć, co mi brakuje? Obawiam się, że większość postów jest nieistotna i tylko pogarsza mój wstyd, ale przynajmniej wiecieco próbowałem.

questionAnswers(2)

yourAnswerToTheQuestion