В Python всякий раз, когда мы что-либо сохраняем, он хранит это как байт. Байты не читаются человеком, а строки являются удобочитаемыми формами. Всякий раз, когда мы сохраняем какую-либо строку, она не будет напрямую сохранять ее как строку; он будет закодирован в байты с использованием различных методов, таких как ASCII и UTF-8.
Например , ‘I am a andreyex’.encode(‘ASCII’)
В приведенном выше примере мы конвертируем строку в байты, используя метод кодирования ASCII. И когда мы распечатаем его с помощью метода печати python, мы увидим результаты вроде b’I am a andreyex ‘. Здесь мы видим, что строка просто следует за одним символом b. На самом деле мы не можем читать байты, но здесь функция печати python декодирует байты в удобочитаемые формы, чтобы мы могли читать строки.
Но на самом деле, когда мы запускаем эту строку, чтобы увидеть каждый символ строки байтов, она будет напечатана следующим образом:
str1 = 'I am a andreyex' print(type(str1)) str2 = b'I am a andreyex' print(type(str2))
Мы создали две строки. Одна строка проста. А другая строка – байты. Когда мы печатаем оба типа строк, мы получаем результаты, как показано ниже. Приведенные ниже результаты показывают, что одна строка является байтовым типом, а другая – строковым.
<class 'str'> <class 'bytes'>
Теперь мы напечатаем каждый символ обеих строк, чтобы найти разницу между ними. Сначала мы напечатаем строку (str1) с помощью цикла for, который является обычной строкой.
for a in str1: print(a)
Вывод:
I a m a a n d r e y e x
Теперь мы собираемся напечатать еще одну строку (str2), которая является байтовым типом.
for a in str2: print(a)
Вывод:
73 32 97 109 32 97 32 97 110 100 114 101 121 101 120
Из приведенных выше результатов мы можем видеть различия между типом байтов и типом строки. Тип байтов не является удобочитаемой формой.
Итак, теперь мы увидим различные методы, которые могут преобразовывать байты в строки.
В этом методе мы будем использовать функцию map() для преобразования байтов в строковый формат. Приведенная ниже небольшая программа проясняет концепцию.
byte = [97, 99, 100] s = ''.join(map(chr, byte)) print(s)
Вывод:
acd
Строка 1: Мы создали список байтов имени.
Строка 3: Затем мы передали символы элемента в списке в качестве параметра и байт в качестве параметра функции join(), которая объединит все символы после преобразования. Наконец, результат распечатывается.
Другой метод – это функция decode(). Функция декодирования работает прямо противоположно функции encode().
# преобразование байтов в строку с помощью decode() str = b'blogs andreyex' print(str) print(type(str)) # теперь преобразование байтов в строку output = str.decode() print('\nOutput:') print(output) print(type(output))
Вывод:
b'blogs andreyex' <class 'bytes'>
Вывод:
blogs andreyex <class 'str'>
Строка 3: Мы создали байтовую строку.
Строки с 4 по 5: эти строки просто печатают информацию о строке, которую мы создали в строке 3.
Строка 8: Теперь мы вызываем функцию декодирования и сохраняем результат под новым именем переменной.
Строки с 11 по 12: эти строки показывают, что теперь наша строка больше не имеет байтового типа и что мы можем подтвердить тип вывода, который является строковым.
В этом методе мы будем использовать функцию codecs.decode(). Эта функция используется для преобразования двоичной строки в нормальную форму. Итак, давайте посмотрим, как на самом деле работает эта функция.
# преобразование байтов в строку с помощью codecs() import codecs str = b'blogs andreyex' print(str) print(type(str)) # теперь преобразование байтов в строку output = codecs.decode(str) print('\nOutput:') print(output) print(type(output))
Вывод:
b'blogs andreyex' <class 'bytes'>
Вывод:
blogs andreyex <class 'str'>
Строка 2: Импортируем библиотечные кодеки.
Строка 3: Мы создали байтовую строку.
Строки с 4 по 5: эти строки просто печатают информацию о строке, которую мы создали в строке 3.
Строка 8: Теперь мы вызываем функцию caodecs.decode и сохраняем результат под новым именем переменной.
Строки с 11 по 12: Эти строки показывают, что теперь наша строка больше не имеет байтового типа, и мы можем подтвердить тип вывода, который является строковым.
Мы также можем преобразовать байты в обычные строки с помощью функции str(). Небольшая программа для понимания этого метода приведена ниже.
if __name__ == '__main__': str1 = b'blogs andreyex' print(str) print(type(str)) # теперь конвертируем байты в строку output = str(str1, 'utf-8') print('\nOutput:') print(output) print(type(output))
Вывод:
<class 'str'> <class 'type'>
Вывод:
blogs andreyex <class 'str'>
Строка 2: мы создали байтовую строку.
Строка 3–4: эти строки просто печатают информацию о строке, которую мы создали в строке 3.
Строка 6: Теперь мы вызываем функцию str () и сохраняем результат под новым именем переменной.
Строки с 7 по 9: Эти строки показывают, что теперь наша строка больше не имеет байтового типа, и мы можем подтвердить тип вывода, который является строковым.
Как программисты на Python, мы ежедневно работаем над разными языками, и иногда мы получаем ошибку из-за байтов. Итак, в этой статье мы пытаемся дать некоторые методы преобразования байтов в строку, чтобы при применении любых методов, связанных со строкой, вы не получали никаких ошибок.
В этом руководстве мы представили все концепции, которые можно использовать для преобразования байтов в строки. Вы можете выбрать в соответствии с требованиями вашей программы.