Python: получить размер строки в байтах
У меня есть строка, которая должна быть отправлена по сети. Мне нужно проверить общие байты, в которых они представлены.
sys.getsizeof(string_name) возвращает дополнительные байты. Например, для sys.getsizeof(«a») возвращается 22, а один символ представлен только в 1 байт в python. Есть ли другой способ найти это?
1 ответ
Если вы хотите количество байтов в строке, эта функция должна сделать это для вас довольно солидно.
Причина, по которой вы получили странные числа, состоит в том, что инкапсулированные в строку — это куча другой информации из-за того, что строки являются реальными объектами в python.
Это интересно, потому что если вы посмотрите на мое решение для кодирования строки в «utf-8», там есть метод «encode» для объекта «s» (который является строкой). Ну, его нужно где-то хранить? Следовательно, счетчик больше, чем обычный байт. В том числе этот метод, а также несколько других :).
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»).
Python-сообщество
P.S пытаюсь обрезать название файла в случае, если оно слишком длинное. Возможно есть стандартные средства.
Отредактировано maxim83632 (Апрель 27, 2015 21:19:01)
#2 Апрель 27, 2015 04:47:26
Вес строки
казнить нельзя помиловать ? Это был намек
Вообще задача очень странная. Почему байты? Не количество символов, а именно байты?
Обрезать строку можно очень просто:
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#3 Апрель 27, 2015 14:48:32
Вес строки
Эмм… А зачем вам строку переводить в байты если можно для названия ее можно просто обрезать?
Если очень нужно то..
#4 Апрель 27, 2015 15:05:02
Вес строки
Отредактировано spikeqzz (Апрель 27, 2015 15:07:12)
#5 Апрель 27, 2015 16:29:38
Вес строки
JOHN_16
2 способ ваш помог, спасибо) Почему-то не додумался перевести в байты и с ними работать.
#6 Апрель 27, 2015 23:31:42
Вес строки
НЕ ВЕРНО
Во первых читаем внимательно документацию, из которой узнаем что данная функция вызывает у объекта метод __sizeof__, который мы можем переопределить на свое усмотрение. На самом деле функция возвращает размер Python объекта занимаемого в памяти, для встроенных типов данных.
Во вторых, вы сами то смотрели свой код? Чему равно x ? 29 байт — ну явно же строка записанная в файл не будет столько места занимать.
Python : Get size of string in bytes
I have a string that is to be sent over a network. I need to check the total bytes it is represented in.
sys.getsizeof(string_name) returns extra bytes. For example for sys.getsizeof(«a») returns 22 , while one character is only represented in 1 byte in python. Is there some other method to find this ?
2 Answers 2
If you want the number of bytes in a string, this function should do it for you pretty solidly.
The reason you got weird numbers is because encapsulated in a string is a bunch of other information due to the fact that strings are actual objects in python.
Its interesting because if you look at my solution to encode the string into ‘utf-8’, there’s an ‘encode’ method on the ‘s’ object (which is a string). Well, it needs to be stored somewhere right? Hence, the higher than normal byte count. Its including that method, along with a few others :).