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


157

Por ejemplo, me sale 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?


1
"¿Qué función puedo usar para calcular el tamaño de la cadena"? ¿Qué tutorial estás usando para aprender Python? Por favor, actualice la pregunta con un poco de información sobre dónde y cómo se está aprendiendo Python.
S.Lott

1
aprendo python solo, ahora sé que len (str) puede devolver el tamaño de la cadena, el tamaño depende de la codificación de la cadena.
babykick

Respuestas:


258

Si está hablando de la longitud de la cadena, puede 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 variable de cadena str. Sombra la str()función incorporada.


33
sys.getsizeofdevuelve el número de bytes que el objeto Python ocupa en la memoria. Eso no será útil para escribir en un archivo en ninguna circunstancia.
Duncan

gracias, pero sys.getsizeof (s) es solo el tamaño del archivo? o el tamaño del objeto python?
babykick

@Duncan, ¿qué tal si sugerimos lo que será útil?
cryanbhu

44
@cryanbhu No sé por qué el OP quería el tamaño y eso afectaría la respuesta, pero probablemente lo más útil sería len(s.encode('utf8'))o cualquier otra codificación que se utilizará al escribir en el archivo. Además, si también quieren una terminación nula, deberán agregar 1 para eso.
Duncan

33

Python 3:

La respuesta del usuario225312 es correcta:

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

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

B. Para obtener el tamaño de la memoria en bytes asignados al strobjeto de almacenamiento , puede usar la sys.getsizeof()función

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

Python 2:

Se complica para Python 2.

A. La len()función en Python 2 devuelve el recuento de bytes asignados para almacenar caracteres codificados en un strobjeto.

A veces será igual al recuento de caracteres:

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

Pero a veces, no lo hará:

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

Eso es porque strpuede usar codificación de longitud variable internamente. Por lo tanto, para contar caracteres str, debe saber qué codificación strestá utilizando su objeto. Luego puedes convertirlo en unicodeobjeto y obtener el recuento de caracteres:

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

B. La sys.getsizeof()función hace lo mismo que en Python 3: devuelve el recuento de bytes asignados para almacenar el objeto de cadena completo

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


2

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

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

1

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.