Pythonで文字列のサイズを取得するにはどうすればよいですか?


157

たとえば、文字列を取得します。

str = "please answer my question"

ファイルに書き込みたいのですが。

しかし、文字列をファイルに書き込む前に、文字列のサイズを知る必要があります。文字列のサイズを計算するためにどの関数を使用できますか?


1
「文字列のサイズを計算するためにどの関数を使用できますか?」Pythonを学ぶためにどのチュートリアルを使用していますか?質問を更新して、Pythonをどこでどのように学習しているかに関する情報を追加してください。
S.Lott、2011

1
私は自分でpythonを学びましたが、len(str)が文字列のサイズを返すことができることを知っています。サイズはstrのコーディングに依存します。
babykick

回答:


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.getsizeofPythonオブジェクトがメモリ内で占有しているバイト数を返します。これは、どのような状況でもファイルへの書き込みには役立ちません。
ダンカン

おかげで、sys.getsizeof(s)はファイルのサイズだけですか?またはPythonオブジェクトのサイズ?
babykick

@Duncanでは、代わりに何が役立つかを提案してみませんか?
cryanbhu

4
@cryanbhu OPがなぜサイズを求め、それが答えに影響を与えるのかはわかりませんが、おそらくlen(s.encode('utf8'))、ファイルに書き込むときに他のエンコーディングを使用するのが最も便利でしょう。また、終端のnullも必要な場合は、そのために1を追加する必要があります。
ダンカン

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では複雑になります。

A.len() Python 2 の関数は、ストアに割り当てられたバイト数を返しますエンコードされた文字をastrオブジェクトます。

時々それは文字数と等しくなります:

>>> 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.