Como obter o tamanho de uma string em Python?

157

Por exemplo, recebo uma string:

str = "please answer my question"

Eu quero gravá-lo em um arquivo.

Mas preciso saber o tamanho da string antes de gravá-la no arquivo. Que função posso usar para calcular o tamanho da string?

babykick
fonte
1
"qual função posso usar para calcular o tamanho da string"? Qual tutorial você está usando para aprender Python? Por favor, atualizar a questão com algumas informações sobre onde e como você está aprendendo Python.
31511 S.Lott
1
eu aprendo python sozinho, agora eu sei que o len (str) pode retornar o tamanho da string, o tamanho depende da codificação do str.
112511 babykick

Respostas:

258

Se você está falando sobre o comprimento da string, pode usar len():

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

Se você precisar do tamanho da string em bytes, precisará de sys.getsizeof():

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

Além disso, não chame sua variável string str. Sombreia a str()função interna.

user225312
fonte
33
sys.getsizeofretorna o número de bytes que o objeto Python ocupa na memória. Isso não será útil para gravar em um arquivo em nenhuma circunstância.
Duncan
obrigado, mas sys.getsizeof (s) é apenas o tamanho do arquivo? ou o tamanho do objeto python?
11118 babykick
@ Duncan, então que tal sugerir o que será útil?
31418 cryanbhu
4
@cryanbhu Não sei por que o OP queria o tamanho e isso afetaria a resposta, mas provavelmente o mais útil seria len(s.encode('utf8'))ou qualquer outra codificação que será usada ao gravar no arquivo. Além disso, se eles também quiserem um nulo final, precisarão adicionar 1 para isso.
Duncan
33

Python 3:

A resposta do usuário225312 está correta:

A. Para contar o número de caracteres no strobjeto, você pode usar a len()função:

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

B. Para obter o tamanho da memória em bytes alocados ao strobjeto de armazenamento , você pode usar a sys.getsizeof()função

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

Python 2:

Fica complicado para o Python 2.

A. A len()função no Python 2 retorna a contagem de bytes alocados para armazenar caracteres codificados em um strobjeto.

Às vezes, será igual à contagem de caracteres:

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

Mas, às vezes, isso não acontece:

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

Isso porque strpode usar codificação de comprimento variável internamente. Portanto, para contar caracteres, strvocê deve saber qual codificação seu strobjeto está usando. Então você pode convertê-lo em unicodeobjeto e obter a contagem de caracteres:

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

B. A sys.getsizeof()função faz a mesma coisa que no Python 3 - retorna a contagem de bytes alocados para armazenar todo o objeto da string

>>> print(getsizeof('йцы'))
27
>>> print(getsizeof('йцы'.decode('utf8')))
32
Igor Bendrup
fonte
8
>>> s = 'abcd'
>>> len(s)
4
Michal Chruszcz
fonte
2

Você também pode usar str.len () para contar o comprimento do elemento na coluna

data['name of column'].str.len() 
Vladimir Gavrysh
fonte
1

A maneira mais pitônica é usar o len(). Lembre-se de que o caractere '\' nas seqüências de escape não é contado e pode ser perigoso se não for usado corretamente.

>>> 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
Robert Grossman
fonte