преобразовать содержимое файла в шестнадцатеричном виде в base64 и распечатать результат - PullRequest
0 голосов
/ 20 сентября 2018

Итак, я пытаюсь создать очень простую программу, которая открывает файл, читает файл и преобразует его содержимое из hex в base64, используя python3.

Я пробовал это:

file = open("test.txt", "r")
contenu = file.read()
encoded = contenu.decode("hex").encode("base64")
print (encoded)

но я получаю ошибку:

AttributeError: 'str' object has no attribute 'decode'

Я пробовал несколько других вещей, но всегда получаю одну и ту же ошибку.

внутри test.txt:

4B

если вы, ребята, можете объяснить мне, что я делаю неправильно, было бы здорово.

Спасибо

РЕДАКТИРОВАТЬ: я должен получить Sw== в качестве вывода

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

вам необходимо закодировать шестнадцатеричную строку из файла test.txt в байтовоподобный объект, используя bytes.fromhex() перед кодированием его в base64.

import base64

with open("test.txt", "r") as file:
    content = file.read()
    encoded = base64.b64encode(bytes.fromhex(content))

print(encoded)

вы всегда должны использовать оператор with для открытия вашего файладля автоматического закрытия ввода-вывода по окончании.

в режиме ожидания:

>>>> import base64
>>>> 
>>>> with open('test.txt', 'r') as file:
....     content = file.read()
....     encoded = base64.b64encode(bytes.fromhex(content))
....     
>>>> encoded
b'Sw=='
0 голосов
/ 20 сентября 2018

Это должно сработать.Ваш код работает для Python <= 2.7, но <a href="https://stackoverflow.com/a/5682984/4453817"> нуждается в обновлении в более поздних версиях .

import base64
file = open("test.txt", "r")
contenu = file.read()
bytes = bytearray.fromhex(contenu)
encoded = base64.b64encode(bytes).decode('ascii')
print(encoded)
...