Jak uzyskać rozmiar łańcucha w Pythonie?

157

Na przykład otrzymuję ciąg:

str = "please answer my question"

Chcę to zapisać do pliku.

Ale muszę znać rozmiar ciągu przed zapisaniem ciągu do pliku. Jakiej funkcji mogę użyć do obliczenia rozmiaru ciągu?

babykick
źródło
1
„Jakiej funkcji mogę użyć do obliczenia rozmiaru ciągu”? Z jakiego samouczka korzystasz do nauki języka Python? Proszę zaktualizować pytanie o pewne informacje o tym, gdzie i jak się uczysz Python.
S.Lott,
1
sam uczę się Pythona, teraz wiem, że len (str) może zwrócić rozmiar ciągu, rozmiar zależy od kodowania str.
babykick

Odpowiedzi:

258

Jeśli mówisz o długości sznurka, możesz użyć len():

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

Jeśli potrzebujesz rozmiaru ciągu w bajtach, potrzebujesz sys.getsizeof():

>>> import sys
>>> sys.getsizeof(s)
58

Nie wywołuj również zmiennej łańcuchowej str. Cieniuje wbudowaną str()funkcję.

user225312
źródło
33
sys.getsizeofzwraca liczbę bajtów zajmowanych przez obiekt Pythona w pamięci. W żadnych okolicznościach nie przyda się to do zapisu do pliku.
Duncan
dzięki, ale sys.getsizeof (s) to tylko rozmiar pliku? lub rozmiar obiektu Pythona?
babykick
@Duncan, a może zamiast tego zasugerować, co będzie przydatne?
cryanbhu
4
@cryanbhu Nie wiem, dlaczego OP chciał mieć rozmiar i to wpłynęłoby na odpowiedź, ale prawdopodobnie najbardziej przydatne byłoby len(s.encode('utf8'))lub jakiekolwiek inne kodowanie, które będzie używane podczas zapisywania do pliku. Ponadto, jeśli chcą również kończącego null, będą musieli dodać 1 do tego.
Duncan,
33

Python 3:

odpowiedź użytkownika225312 jest prawidłowa:

A. Aby policzyć liczbę znaków w strobiekcie, możesz użyć len()funkcji:

>>> print(len('please anwser my question'))
25

B. Aby uzyskać rozmiar pamięci w bajtach przydzielonych do przechowywania strobiektu, możesz użyć sys.getsizeof()funkcji

>>> from sys import getsizeof
>>> print(getsizeof('please anwser my question'))
50

Python 2:

W przypadku Pythona 2 sprawa staje się skomplikowana.

A.len() funkcja w Pythonie 2 zwraca liczyć bajtów przeznaczonych do przechowywania zakodowanych znaków w strobiekcie.

Czasami będzie to równe liczbie znaków:

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

Ale czasami nie:

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

Dzieje się tak, ponieważ strmoże wewnętrznie używać kodowania o zmiennej długości . Tak więc, aby policzyć znaki str, powinieneś wiedzieć, jakiego kodowania strużywa twój obiekt. Następnie możesz przekonwertować go na unicodeobiekt i uzyskać liczbę znaków:

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

B.sys.getsizeof() funkcja działa tak samo jak w Pythonie 3 - zwraca liczbę bajtów przeznaczonych do przechowywania cały obiekt string

>>> print(getsizeof('йцы'))
27
>>> print(getsizeof('йцы'.decode('utf8')))
32
Igor Bendrup
źródło
8
>>> s = 'abcd'
>>> len(s)
4
Michał Chruszcz
źródło
2

Możesz także użyć str.len (), aby policzyć długość elementu w kolumnie

data['name of column'].str.len() 
Vladimir Gavrysh
źródło
1

Najbardziej Pythonowym sposobem jest użycie len(). Pamiętaj, że znak „\” w sekwencjach ucieczki nie jest liczony i może być niebezpieczny, jeśli nie zostanie użyty poprawnie.

>>> 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
Robert Grossman
źródło