How to get the size of a string in Python?


For example, I get a string:

str = "please answer my question"

I want to write it to a file.

But I need to know the size of the string before writing the string to the file. What function can I use to calculate the size of the string?

1/21/2016 7:35:33 PM

Accepted Answer

If you are talking about the length of the string, you can use len():

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

If you need the size of the string in bytes, you need sys.getsizeof():

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

Also, don't call your string variable str. It shadows the built-in str() function.

11/12/2018 6:06:05 AM

Python 3.*:

The user225312's answer is correct:

A. To count number of characters in str object, you can use len() function:

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

B. To get memory size in bytes allocated to store str object, you can use sys.getsizeof() function

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

Python 2.*:

It's getting complicated for Python 2.*.

A. The len() function in Python 2 returns count of bytes allocated to store encoded characters in a str object.

Sometimes it will be equal to character count:

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

But sometimes, it won't:

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

That's because str can use variable-length encoding internally. So, to count characters in str you should know which encoding your str object is using. Then you can convert it to unicode object and get character count:

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

B. The sys.getsizeof() function does the same thing as in Python 3 - it returns count of bytes allocated to store the whole string object

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

P.S. I've tested my code samples under Anaconda Python on 32-bit Windows

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow