Jak uzyskać rozmiar łańcucha w Pythonie?

Na przykład otrzymuję ciąg znaków:

str = "please answer my question"

Chcę to zapisać do pliku.

Ale muszę znać rozmiar łańcucha przed zapisaniem go do pliku. Jakiej funkcji mogę użyć do obliczenia rozmiaru łańcucha?

Author: emlai, 2011-02-11

5 answers

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

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

Jeśli potrzebujesz rozmiaru łańcucha w bajtach, musisz sys.getsizeof():

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

Również, nie wywołaj swojego Sznurka str. Cieniuje wbudowaną str() funkcja.

 200
Author: user225312,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 05:12:20

Python 3.*:

Odpowiedź użytkownika 225312 jest prawidłowa:

A. aby zliczyć ilość znaków w obiekcie str, możesz użyć funkcji len():

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

B. aby uzyskać rozmiar pamięci w bajtach przypisanych do obiektu str, można użyć funkcji sys.getsizeof()

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

Python 2.*:

Robi się skomplikowany dla Pythona 2.*.

A. funkcja len() w Pythonie 2 Zwraca liczbę bajtów przydzielonych do przechowalni zakodowanych znaki w obiekcie str.

Czasami będzie równa liczbie znaków:

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

Ale czasami nie będzie:

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

To dlatego, że str może używaćkodowania o zmiennej długości wewnętrznie. Aby zliczyć znaki w str powinieneś wiedzieć, którego kodowania używa twój obiekt str. Następnie można go przekonwertować na unicode obiekt i liczba znaków:

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

B. funkcja sys.getsizeof() robi to samo co w Pythonie 3 - zwraca ilość bajtów przydzielonych do przechowywania całego obiektu string

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

P. S. przetestowałem moje próbki kodu pod Anaconda Python na 32-bitowym Windowsie

 24
Author: Igor Bendrup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 00:40:38
>>> s = 'abcd'
>>> len(s)
4
 7
Author: Michal Chruszcz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-11 09:52:51

Najbardziej sposobem Pythonicznym jest użycie len(). Należy pamiętać, że znak ' \ ' w sekwencjach escape 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
 1
Author: Robert Grossman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 05:04:11

Możesz również użyć str.len () do zliczania długości elementu w kolumnie

data['name of column'].str.len() 
 0
Author: Vladimir Gavrysh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 03:33:50