Python типы данных байт

Байты¶

Байтовые строки очень похожи на обычные строки, но с некоторыми отличиями.

Что такое байты? Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию. ).

Создание байтовой строки¶

>>> b'bytes' b'bytes' >>> 'Байты'.encode('utf-8') b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b' >>> bytes('bytes', encoding = 'utf-8') b'bytes' >>> bytes([50, 100, 76, 72, 41]) b'2dLH)' 

Функция bytes принимает список чисел от 0 до 255 и возвращает байты, получающиеся применением функции chr .

>>> chr(50) '2' >>> chr(100) 'd' >>> chr(76) 'L' 

Что делать с байтами? Хотя байтовые строки поддерживают практически все строковые методы, с ними мало что нужно делать. Обычно их надо записать в файл / прочесть из файла и преобразовать во что-либо другое (конечно, если очень хочется, то можно и распечатать). Для преобразования в строку используется метод decode :

>>> b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'.decode('utf-8') 'Байты' 

Bytearray¶

Bytearray в Python — массив байт. От типа bytes отличается только тем, что является изменяемым.

>>> b = bytearray(b'hello world!') >>> b bytearray(b'hello world!') >>> b[0] 104 >>> b[0] = b'h' Traceback (most recent call last): File "", line 1, in b[0] = b'h' TypeError: an integer is required >>> b[0] = 105 >>> b bytearray(b'iello world!') >>> for i in range(len(b)): . b[i] += i . >>> b bytearray(b'ifnos%>vzun,') 

Источник

Все, что нужно знать о байтах в Python

Все, что нужно знать о байтах в Python

Новые типы двоичных последовательностей во многих отношениях похожи на тип str в Python 2. Главное что нужно знать – это то, что существуют два основных встроенных типа двоичных последовательностей: неизменяемый тип bytes, появившийся в Python 3, и изменяемый тип bytearray, добавленный в Python 2.6.

Читайте также:  Javascript load new page

Кстати, в Python 2.6 был также введен тип bytes, но лишь как псевдоним типа str, он ведет себя иначе, чем тип bytes в Python 3.

Каждый элемент bytes или bytearray – целое число от 0 до 255, а не односимвольная строка, как в типе str в Python 2 str.

Однако срез двоичной последовательности всегда является двоичной последовательностью того же типа, даже если это срез длины.

Пример №1. Пятибайтовая последовательность в виде bytes и bytearray.

1. bytes можно получить из str, если известна кодировка.

2. Каждый элемент – целое число в диапазоне range(256).

3. Срезы bytes также имеют тип bytes, даже если срез состоит из одного байта

4. Для типа bytearray не существует литерального синтаксиса: в оболочке объекты этого типа представляются в виде конструктора bytearray(), аргументом которого является литерал типа bytes.

5. Срез cafe_arr также имеет типа bytearray

Тот факт, что my_bytes[0] возвращает int, а my_bytes[:1] – объект bytes длины 1, не должен вызывать удивления. Единственный тип последовательности, для которого s[0] == s[:1] – это типа str.

И хотя на практике этот тип используется сплошь и рядом, его поведение – исключение из правила. Для всех остальных последовательностей s[i] возвращает один элемент, а s[i:i+1] – последовательность, состоящую из единственного элемента s[i].

Хотя двоичные последовательности – на самом деле, последовательности целых чисел, в их литеральной нотации отражен тот факт, что часто они включают ASCII-текст.

Поэтому применяются различные способы отображения, зависящие от значения каждого байта.

  • Для байтов из диапазона символов ASCII, имеющих графическое начертание – от пробела до ~ выводится сам символ ASCII.
  • Для байтов, соответствующих символам табуляции, новой строки, возврата каретки и \, выводятся управляющие последовательности \t, \n, \r и \\.
  • Для все остальных байтов выводится шестнадцатеричное представление, например, нулевой байт представляется последовательностью \x00.

Именно поэтому в примере №1 мы видим представление b’caf\xc3\xa9′. Первые три байта b’caf’ принадлежат диапазону символов ASCII с графическим начертанием, последний – нет.

Оба типа bytes и bytearray поддерживают все методы типа str кроме тех, что относятся к форматированию(format, format_map), и еще нескольких, прямо зависящих от особенностей Unicode, в том числе casefold, isdecimal, isidentifier, isnumeric, isprintable и encode.

Это означает, что при работе с двоичными последовательностями мы можем пользоваться знакомыми методами строк, например endswith, replace, strip, translate, upper и десятками других, только аргументы должны иметь тип bytes, а не str.

К двоичным последовательностям применимы и функции для работы с регулярными выражениями из модуля re, если регулярное выражение откомпилировано из двоичной последовательности, а не из str.

Оператор % не работает с двоичными последовательностями в версиях от Python 3.0 до 3.4, но, если верить документу PEP 461, то его предполагается поддержать в будущем.

Оператор % часто используется во многих языках программирования. Один мой знакомый который разрабатывает шаблоны для WordPress как например ThemeForest Grand Conference рассказал что без оператора % пришлось бы изобретать велосипеды каждый день.

Для двоичных последовательностей существует метод класса, отсутствующий в типе str: fromhex, который строит последовательность, разбирая пары шеснадцатеричных цифр, которые могут быть разделены пробелами, хотя это и не обязательно.

Источник

Оцените статью