파이썬에서 문자열의 크기를 얻는 방법?


157

예를 들어 문자열을 얻습니다.

str = "please answer my question"

파일에 쓰고 싶습니다.

그러나 문자열을 파일에 쓰기 전에 문자열의 크기를 알아야합니다. 문자열의 크기를 계산하는 데 어떤 기능을 사용할 수 있습니까?


1
"문자열 크기를 계산하는 데 어떤 기능을 사용할 수 있습니까?" 파이썬을 배우기 위해 어떤 튜토리얼을 사용하고 있습니까? 제발 업데이트 파이썬을 배우고 위치와 방법에 대한 몇 가지 정보를 사용하여 질문을.
S.Lott

1
나는 혼자서 파이썬을 배우고, 이제 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.getsizeof파이썬 객체가 메모리에서 차지하는 바이트 수를 반환합니다. 어떤 상황에서도 파일에 쓰는 데 유용하지 않습니다.
던컨

고맙지 만 sys.getsizeof (s)는 파일의 크기 일 뿐입니 까? 또는 파이썬 객체의 크기?
babykick

@ Duncan 그래서 대신에 유용 할 것을 제안하는 것은 어떻습니까?
cryanbhu

4
@cryanbhu OP가 왜 크기를 원했고 그것이 대답에 영향을 미칠지 모르겠지만 아마도 가장 유용한 것은 len(s.encode('utf8'))또는 파일에 쓸 때 다른 인코딩이 사용될 것입니다. 또한 종료 널을 원하면 1을 추가해야합니다.
던컨

33

파이썬 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

파이썬 2 :

파이썬 2에서는 복잡해집니다.

A.len() Python 2 의 함수는 인코딩 된 문자str객체 에 저장하기 위해 할당 된 바이트 수를 반환 합니다.

때로는 문자 수와 같습니다.

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

그러나 때로는 그렇지 않습니다.

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

내부적으로 가변 길이 인코딩을str 사용할 수 있기 때문 입니다. 따라서 문자를 세 려면 객체가 사용 하는 인코딩을 알아야합니다 . 그런 다음 객체 로 변환하고 문자 수를 얻을 수 있습니다.strstrunicode

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

B.sys.getsizeof()함수는 Python 3에서와 동일한 기능을 수행합니다 . 전체 문자열 객체 를 저장하기 위해 할당 된 바이트 수를 반환 합니다.

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



1

가장 파이썬적인 방법은을 사용하는 것 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.