Как получить размер строки в Python?


157

Например, я получаю строку:

str = "please answer my question"

Я хочу записать это в файл.

Но мне нужно знать размер строки перед записью строки в файл. Какую функцию я могу использовать для расчета размера строки?


1
«Какую функцию я могу использовать для расчета размера строки»? Какой учебник вы используете для изучения Python? Пожалуйста, обновите вопрос, предоставив некоторую информацию о том, где и как вы изучаете Python.
S.Lott

1
я изучаю python самостоятельно, теперь я знаю, что len (str) может вернуть размер строки, размер зависит от кодировки str.
babykick

Ответы:


258

Если вы говорите о длине строки, вы можете использовать len():

>>> s = 'please answer my question'
>>> len(s)  # number of characters in s
25

Если вам нужен размер строки в байтах, вам нужно sys.getsizeof():

>>> import sys
>>> sys.getsizeof(s)
58

Кроме того, не вызывайте строковую переменную str. Затеняет встроенную str()функцию.


33
sys.getsizeofвозвращает количество байтов, которые объект Python занимает в памяти. Это не будет полезно для записи в файл при любых обстоятельствах.
Дункан

спасибо, а sys.getsizeof (s) это просто размер файла? или размер объекта питона?
babykick

@Duncan, а как насчет того, чтобы предложить что-нибудь полезное?
крианбху

4
@cryanbhu Я не знаю, почему ОП хотел размер, и это повлияло бы на ответ, но, вероятно, наиболее полезным было бы то len(s.encode('utf8'))или иное кодирование, которое будет использоваться при записи в файл. Кроме того, если они также хотят завершающий ноль, им нужно будет добавить 1 для этого.
Дункан

33

Python 3:

Ответ user225312 правильный:

A. Для подсчета количества символов в strобъекте вы можете использовать len()функцию:

>>> print(len('please anwser my question'))
25

B. Чтобы получить объем памяти в байтах, выделенный для strобъекта хранения , вы можете использовать sys.getsizeof()функцию

>>> from sys import getsizeof
>>> print(getsizeof('please anwser my question'))
50

Python 2:

Это становится сложным для Python 2.

А.len() функция в Python 2 возвращает кол - во байтах , выделенных для хранения закодированных символов в strобъекте.

Иногда это будет равно количеству символов:

>>> print(len('abc'))
3

Но иногда это не будет:

>>> print(len('йцы'))  # String contains Cyrillic symbols
6

Это потому, что strможно использовать внутреннюю кодировку переменной длины . Таким образом, для подсчета символов strвы должны знать, какую кодировку использует ваш strобъект. Затем вы можете преобразовать его в unicodeобъект и получить количество символов:

>>> print(len('йцы'.decode('utf8'))) #String contains Cyrillic symbols 
3

B.sys.getsizeof() функция делает то же самое , как и в Python 3 - возвращает количество байт , выделенных для хранения всего объекта строки

>>> print(getsizeof('йцы'))
27
>>> print(getsizeof('йцы'.decode('utf8')))
32



1

Самый Pythonic способ заключается в использовании len(). Имейте в виду, что символ «\» в escape-последовательностях не учитывается и может быть опасным, если не используется правильно.

>>> len('foo')
3
>>> len('\foo')
3
>>> len('\xoo')
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.