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

bab*_*ick 145 python string string-length

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

str = "please answer my question"
Run Code Online (Sandbox Code Playgroud)

我想把它写到一个文件.

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

use*_*312 238

如果你在谈论字符串的长度,你可以使用len():

>>> s = 'please answer my question'
>>> len(s)  # number of characters in s
25
Run Code Online (Sandbox Code Playgroud)

如果您需要以字节为单位的字符串大小,则需要sys.getsizeof():

>>> import sys
>>> sys.getsizeof(s)
58
Run Code Online (Sandbox Code Playgroud)

另外,不要调用你的字符串变量str.它会影响内置str()功能.

  • `sys.getsizeof`返回Python对象在内存中占用的字节数.在任何情况下写入文件都没有用. (32认同)
  • @cryanbhu我不知道为什么OP想要的大小会影响答案,但最有用的可能是`len(s.encode('utf8'))`或者写作时会使用的其他编码到文件.此外,如果他们还想要终止null,那么他们需要为此添加1. (3认同)

Igo*_*rup 33

Python 3.*:

user225312的答案是正确的:

A.要计算str对象中的字符数,可以使用以下len()函数:

>>> print(len('please anwser my question'))
25
Run Code Online (Sandbox Code Playgroud)

B.要获取分配给存储str对象的字节大小,可以使用sys.getsizeof()函数

>>> from sys import getsizeof
>>> print(getsizeof('please anwser my question'))
50
Run Code Online (Sandbox Code Playgroud)

Python 2.*:

对于Python 2来说,它变得越来越复杂.

:len()Python 2中的函数返回分配给在对象中存储编码字符的字节数str.

有时候它会等于字符数:

>>> print(len('abc'))
3
Run Code Online (Sandbox Code Playgroud)

但有时,它不会:

>>> print(len('???'))  # String contains Cyrillic symbols
6
Run Code Online (Sandbox Code Playgroud)

那是因为str可以在内部使用可变长度编码.因此,要计算str您的str对象正在使用的编码.然后你可以将它转换为unicode对象并获得字符数:

>>> print(len('???'.decode('utf8'))) #String contains Cyrillic symbols 
3
Run Code Online (Sandbox Code Playgroud)

B.sys.getsizeof()函数与Python 3中的函数相同 - 它返回分配用于存储整个字符串对象的字节数

>>> print(getsizeof('???'))
27
>>> print(getsizeof('???'.decode('utf8')))
32
Run Code Online (Sandbox Code Playgroud)

PS我在32位Windows上测试了Anaconda Python下的代码示例