Байты (bytes и bytearray)
Байтовые строки в Python — что это такое и с чем это едят? Байтовые строки очень похожи на обычные строки, но с некоторыми отличиями. Попробуем выяснить, с какими.
Что такое байты? Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию. ).
Создаём байтовую строку:
Если первые три способа нам уже известны (тут, тут и тут), то последний нужно пояснить. Функция bytes принимает список чисел от 0 до 255 и возвращает байты, получающиеся применением функции chr.
Что делать с байтами? Хотя байтовые строки поддерживают практически все строковые методы, с ними мало что нужно делать. Обычно их надо записать в файл / прочесть из файла и преобразовать во что-либо другое (конечно, если очень хочется, то можно и распечатать). Для преобразования в строку используется метод decode:
Bytearray
Bytearray в python — массив байт. От типа bytes отличается только тем, что является изменяемым. Про него, в общем-то, больше рассказать нечего.
Python: получить размер строки в байтах
У меня есть строка, которая должна быть отправлена по сети. Мне нужно проверить общее количество байтов, в которых оно представлено.
sys.getsizeof(string_name) возвращает дополнительные байты. Например, для sys.getsizeof(«a») возвращает 22, в то время как один символ представлен в Python только одним байтом. Есть ли другой способ найти это?
2 ответа
Если вам нужно количество байтов в строке, эта функция должна сделать это для вас довольно основательно.
Причина, по которой вы получили странные числа, заключается в том, что инкапсулированные в строку — это куча другой информации из-за того, что строки являются реальными объектами в python.
Это интересно, потому что если вы посмотрите на мое решение для кодирования строки в ‘utf-8’, там есть метод ‘encode’ для объекта ‘s’ (который является строкой). Ну, его нужно где-то хранить, да? Следовательно, количество байтов больше обычного. Он включает этот метод вместе с некоторыми другими :).
Есть предостережение в отношении принятого ответа.
Для некоторых многобайтовых кодировок (например, utf-16) string.encode добавит в начале Метку порядка байтов (BOM), которая представляет собой последовательность специальных байтов, информирующих читателя о байтовый порядок байтов. Таким образом, длина, которую вы получите, на самом деле len(BOM) + len(encoded_word) .
Если вы не хотите считать байты спецификации, вы можете использовать либо версию с прямым порядком байтов (с добавлением суффикса «-le»), либо версию с прямым порядком байтов (с добавлением суффикса «be»).
Как определить длину байта строки в кодировке utf-8 в Python?
Я работаю с загрузками Amazon S3 и испытываю проблемы с слишком длинными именами ключей. S3 ограничивает длину ключа байтами, а не символами.
имя ключа представляет собой последовательность символов Юникода, кодировка UTF-8 имеет длину не более 1024 байт.
Я также пытаюсь встроить метаданные в имя файла, поэтому мне нужно иметь возможность вычислить текущую длину байта строки с помощью Python, чтобы сделать конечно, метаданные не делают ключ слишком длинным (в этом случае мне придется использовать отдельный файл метаданных).
Как определить длину байта строки в кодировке utf-8? Опять же, меня не интересует количество знаков. скорее фактическая длина байта, используемая для хранения строки.