Как узнать сколько байт в тексте python
Перейти к содержимому

Как узнать сколько байт в тексте python

  • автор:

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 ?

Iffat Fatima's user avatar

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 :).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *