如何在Python中获取字符串的大小(长度)

185
例如,我得到一个字符串:
str = "please answer my question"

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

2
我可以使用哪个函数来计算字符串的大小?你正在使用哪个教程学习Python?请在问题中更新一些关于你正在哪里以及如何学习Python的信息。 - S.Lott
3
我自学了Python,现在我知道len(str)可以返回字符串的大小,大小取决于字符串的编码。 - babykick
写入后文件的大小将是多少?假设在写入之前,该文件的大小为零。 - Vicky Gupta
7个回答

311

如果你想要获取字符串的长度,你可以使用len()函数:

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

如果你需要以字节为单位获取字符串的大小,你需要使用sys.getsizeof()函数:

>>> import sys
>>> sys.getsizeof(s)
58
此外,不要将您的字符串变量命名为str。这会遮盖内置的str()函数。

48
sys.getsizeof 返回 Python 对象在内存中占用的字节数。在任何情况下,这都不会对写入文件有用。 - Duncan
谢谢,但是sys.getsizeof(s)只是文件的大小吗?还是Python对象的大小? - babykick
10
我不知道为什么原始问题需要大小并且它会影响答案,但最有用的可能是len(s.encode('utf8'))或在写入文件时使用的任何其他编码方式。另外,如果他们还想要一个终止空值,那么就需要再加1个字节。 - Duncan

44

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 中,情况变得很复杂。

A. 在 Python 2 中,len() 函数返回用于存储 编码字符 的字节数。

有时它将等于字符数:

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

8
>>> s = 'abcd'
>>> len(s)
4

4
您也可以使用str.len()来计算列中元素的长度。
data['name of column'].str.len() 

1
你想在Python语言中找到字符串的长度吗?如果你想找到单词的长度,可以使用len函数。
string = input("Enter the string: ")

print("The string length is: ", len(string))

输出:

输入字符串:viral

字符串长度为:5


1 - 为什么要添加与被接受的答案相似的答案? 2 - 您的输出与您的代码类似,请编辑或考虑删除此冗余且不完整的答案... - Ruli

1
最Pythonic的方法是使用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

0
提供的回答是恰当的,但需要注意的是,在Python中,空格也被视为字符。
然而,如果想要创建一个需要计算某人姓名中总字符数的函数,可能需要删除空格。可以使用.replace()方法轻松实现这一点。
例如:
name = "Steve Wozniak"
number = len(name.replace(" ", ""))
print(number)

这里的输出是12(不包括空格),而不是13(包括空格)。

2,161,081个Python问题。这听起来像是对一个不同问题的回答,比如*如何使用Python计算字符串中去除空格后的字符数?*。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接