Тип данных bytearray является разновидностью типа bytes и поддерживает те же самые методы и операции. В отличие от типа bytes, тип bytearray допускает возможность непосредственного изменения объекта и содержит дополнительные методы, позволяющие выполнять эти изменения.
Создать объект типа bytearray можно следующими способами:
С помощью функции bytearray([<Строка>, <Кодировка>[, <Обработка ошибок>]]). Если параметры не указаны, то возвращается пустой объект. Чтобы преобразовать строку в объект типа bytearray, необходимо передать минимум два первых параметра. Если строка указана только в первом параметре, то возбуждается исключение TypeError.
Например:
1 2 3 4 5 6 7 8 9 10 |
>>> bytearray() bytearray(b'') >>> bytearray("Питон", "cp1251") bytearray(b'\xcf\xe8\xf2\xee\xed') >>> bytearray("Питон") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: string argument without an encoding |
В третьем параметре могут быть указаны значения “strict”(при ошибке возбуждается исключение UnicodeEncodeError значение по умолчанию), “replace”(неизвестный символ заменяется символом вопроса) или “ignore”(неизвестные символы игнорируются).
Например:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> bytearray("string\uFFFD", "ср1251", "strict") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.4/encodings/cp1251.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_table) UnicodeEncodeError: 'charmap' codec can't encode character '\ufffd' in position 6: character maps to <undefined> >>> bytearray("string\uFFFD", "cp1251", "replace") bytearray(b'string?') >>>bytearray("string\uFFFD", "cp1251", "ignore") bytearray(b'string') |
Создать объект bytearray также можно с помощью функции bytearray(<Последовательность>), которая преобразует последовательность целых чисел от 0 до 255 в объект типа bytearray. Если число не попадает в диапазон, то возбуждается исключение ValueError.
Например:
1 2 3 4 5 6 7 8 9 |
>>> b = bytearray([225, 226, 224, 174, 170, 160]) >>> b bytearray(b'\xe1\xe2\xe0\xae\xaa\xa0') >>> bytearray(b'\xe1\xe2\xe0\xae\xaa\xa0') bytearray(b'\xe1\xe2\xe0\xae\xaa\xa0') >>> str(b, "cp866") 'строка' |
Можно создать объект bytearray с помощью функции bytearray(<Число>), которая задает количество элементов в последовательности. Каждый элемент будет содержать нулевой символ:
1 2 |
>>> bytearray(5) bytearray(b'\x00\x00\x00\x00\x00') |
Существует еще такая функция bytearray.fromhex(<Строка>). Строка в этом случае должна содержвать шестнадцатеричные значения символов:
1 2 3 |
>>> b = bytearray.fromhex(" e1 e2e0ae aaa0 ") >>> b bytearray(b'\xe1\xe2\xe0\xae\xaa\xa0') |
Тип bytearray относится к изменяемым типам. Поэтому можно не только получить значение по индексу, но и изменить его(что не свойственно строкам):
1 2 3 4 5 6 |
>>> b = bytearray("Python", "ascii") >>> b[0] 80 >>> b[0] = b"J"[0] >>>b bytearray(b'Jython') |
При изменении значения важно помнить, что присваиваемое значение должно быть целым числом в диапазоне от 0 до 255. Чтобы получить число в предыдущем примере, мы создали объект типа bytes, а затем присвоили значение, расположенное по индексу 0 (b[0] = b”J”[0]). Можно, конечно, сразу указать код символа, но ведь держать все коды символов в памяти свойственно компьютеру, а не человеку.
Для изменения объекта можно также использовать следующие методы:
append(<Число>) – добавляет один элемент в конец объекта. Метод изменяет текущий объект и нечего не возвращает. Например:
1 2 3 4 |
>>> b = bytearray("string", "ascii") >>> b.append(b"1"[0]); >>> b bytearray(b'string1') |
extend(<Последовательность>) – добавляет элементы последовательности в конец объекта. Метод изменяет текущий объект и ничего не возвращает. Пример:
1 2 3 4 |
>>> b = bytearray("string", "ascii") >>> b.extend(b"123"); >>> b bytearray(b'string123') |
Добавить несколько элементов можно с помощью операторов + и +=:
1 2 3 4 5 6 |
>>> b = bytearray("string", "ascii") >>> b + b"123" # Возвращает новый объект bytearray(b'string123') >>> b += b"456"; # Изменяет текущий объект >>> b bytearray(b'string456') |
Кроме того, можно воспользоваться операцией присваивания значения срезу:
1 2 3 4 |
>>> b = bytearray("string", "ascii") >>> b[len(b):] = b"123" # Изменяет текущий список >>> b bytearray(b'string123') |
insert(<Индекс>, <Число>) – добавляет один элемент в указанную позицию. Остальные элементы смещаются. Метод изменяет текущий объект и ничего не возвращает. Добавим элемент в начало объекта:
1 2 3 4 |
>>> b = bytearray("string", "ascii") >>> b.insert(0, b"1"[0]); >>> b bytearray(b'1string') |
Метод insert() позволяет добавить только один элемент. Чтобы добавить несколько элементов, можно воспользоваться операцией присваивания значения срезу. Добавим несколько элементов в начало объекта:
1 2 3 4 |
>>> b = bytearray("string", "ascii") >>> b[:0] = b"123"; >>> b bytearray(b'123string') |
pop([<Индекс>]) – удаляет элемент, расположенный по указанному индексу, и возвращает его. Если индекс не указан, то удаляет и возвращает последний элемент. Пример:
1 2 3 4 5 6 7 8 9 |
>>> b = bytearray("string", "ascii") >>> b.pop() # Удаляем последний элемент 103 >>> b bytearray(b'strin') >>> b.pop(0) # Удаляем первый элемент 115 >>> b bytearray(b'trin') |
Накрутка лайков на Аск фм – тема, которая волнует продвинутую молодёжь. Что выгоднее увеличить их своими силами или накрутить лайки за деньги – плюсы и минусы способов. А также как найти сервис с лучшими ценами на лайки Аск фм, советы даёт блог pricesmm.com
Удалить элемент списка позволяет также оператор del:
1 2 3 4 5 6 7 |
>>> b = bytearray("string", "ascii") >>> del b[5]; # Удаляем последний элемент >>> b bytearray(b'strin') >>> del b[:2]; # Удаляем первый и второй элемент >>> b bytearray(b'rin') |
remove(<Число>) – удаляем первый элемент, содержащий указанное значение. Если элемент не найден, возбуждается исключение ValueError. Метод изменяет текущий объект и ничего не возвращает. Пример:
1 2 3 4 |
>>> b = bytearray("strstr", "ascii") >>> b.remove(b"s"[0]); # Удаляет только первый элемент >>> b bytearray(b'trstr') |
reverse() – изменяет порядок следования элементов на противоположный. Метод изменяет текущий объект и ничего не возвращает. Пример:
1 2 3 4 |
>>> b = bytearray("string", "ascii") >>> b.reverse(); >>> b bytearray(b'gnirts') |
Преобразовать объект типа bytearray в строку позволяет метод decode(). Метод имеет следующий формат:
decode([encoding=”utf-8″][, errors=”strict”])
Параметр encoding задает кодировку символов(по умолчанию UTF-8) в объекте bytearray, а параметр errors – способ обработки ошибок при преобразовании. В параметре errors можно указать значения “strict”(значение по умолчанию), “replace” или “ignore”. Пример преобразования:
1 2 3 |
>>> b = bytearray("строка", "cp1251") >>> b.decode(encoding="cp1251"), b.decode("cp1251") ('строка', 'строка') |
Для преобразования можно также воспользоваться функцией str():
1 2 3 |
>>> b = bytearray("строка", "cp1251") >>> str(b, "cp1251") 'строка' |