如何在Python中获取字符串的大小?


157

例如,我得到一个字符串:

str = "please answer my question"

我想将其写入文件。

但是在将字符串写入文件之前,我需要知道字符串的大小。我可以使用什么函数来计算字符串的大小?


1
“我可以使用什么函数来计算字符串的大小”?您正在使用什么教程来学习Python?请使用有关在哪里以及如何学习Python的一些信息来更新问题。
S.Lott

1
我自己学习python,现在我知道len(str)可以返回字符串的大小,该大小取决于str的编码。
babykick 2011年

Answers:


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 2011年

@Duncan那么建议什么将是有用的呢?
cryanbhu

4
@cryanbhu我不知道为什么OP想要大小,这会影响答案,但可能最有用的len(s.encode('utf8'))是写入文件时或将要使用的任何其他编码。另外,如果他们还想要终止null,则需要为此添加1。
邓肯'18

33

Python 3:

user225312的答案是正确的:

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

Python 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



1

Python的方式是使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.