Як отримати розмір рядка в 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) - це лише розмір файлу? або розмір об’єкта python?
babykick

@Duncan, то як щодо того, щоб запропонувати те, що буде корисним замість цього?
cryanbhu

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

33

Пітон 3:

відповідь користувача225312 правильна:

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

Пітон 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


2

Ви також можете використовувати str.len () для підрахунку довжини елемента в стовпці

data['name of column'].str.len() 

1

Найбільш пітонічним способом є використання len(). Майте на увазі, що символ "\" у відхідних послідовностях не зараховується і може бути небезпечним, якщо його неправильно використовувати.

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