Cómo obtener el tamaño de una cadena en Python?


Por ejemplo, obtengo una cadena:

str = "please answer my question"

Quiero escribirlo en un archivo.

Pero necesito saber el tamaño de la cadena antes de escribir la cadena en el archivo. ¿Qué función puedo usar para calcular el tamaño de la cadena?

Author: emlai, 2011-02-11

5 answers

Si estás hablando de la longitud de la cadena, puedes usar len():

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

Si necesita el tamaño de la cadena en bytes, necesita sys.getsizeof():

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

Además, no llame a su cadena str. Oscurece el incorporado str() función.

 200
Author: user225312,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 05:12:20

Python 3.*:

La respuesta del user225312 es correcta:

A. Para contar el número de caracteres en el objeto str, puede usar la función len():

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

B. Para obtener el tamaño de la memoria en bytes asignados para almacenar el objeto str, puede usar la función sys.getsizeof()

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

Python 2.*:

Se está complicando para Python 2.*.

A. La función len() en Python 2 devuelve el número de bytes asignados a almacenar codificado caracteres en un objeto str.

A veces será igual al número de caracteres:

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

Pero a veces, no lo hará:

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

Esto se debe a que str puede usar codificación de longitud variable internamente. Por lo tanto, para contar caracteres en str debe saber qué codificación está utilizando su objeto str. Luego puede convertirlo a unicode objeto y obtener número de caracteres:

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

B. La función sys.getsizeof() hace lo mismo que en Python 3 - devuelve la cantidad de bytes asignados a almacenar el objeto string completo

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

P.D. He probado mis muestras de código bajo Anaconda Python {[45] } en Windows de 32 bits

 24
Author: Igor Bendrup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-13 00:40:38
>>> s = 'abcd'
>>> len(s)
4
 7
Author: Michal Chruszcz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-11 09:52:51

La forma más pitónica es usar el len(). Tenga en cuenta que el carácter '\' en las secuencias de escape no se cuenta y puede ser peligroso si no se usa correctamente.

>>> 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
 1
Author: Robert Grossman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-11 05:04:11

También puede usar str.len () para contar la longitud del elemento en la columna

data['name of column'].str.len() 
 0
Author: Vladimir Gavrysh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-02 03:33:50