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?
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.
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
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
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
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()
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