Comment obtenir la taille d'une chaîne en Python?

157

Par exemple, j'obtiens une chaîne:

str = "please answer my question"

Je veux l'écrire dans un fichier.

Mais j'ai besoin de connaître la taille de la chaîne avant d'écrire la chaîne dans le fichier. Quelle fonction puis-je utiliser pour calculer la taille de la chaîne?

babykick
la source
1
"quelle fonction puis-je utiliser pour calculer la taille de la chaîne"? Quel tutoriel utilisez-vous pour apprendre Python? Veuillez mettre à jour la question avec des informations sur où et comment vous apprenez Python.
S.Lott le
1
j'apprends python par moi-même, maintenant je sais que le len (str) peut renvoyer la taille de la chaîne, la taille dépend du codage de la str.
babykick

Réponses:

258

Si vous parlez de la longueur de la chaîne, vous pouvez utiliser len():

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

Si vous avez besoin de la taille de la chaîne en octets, vous avez besoin de sys.getsizeof():

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

N'appelez pas non plus votre variable chaîne str. Il masque la str()fonction intégrée.

user225312
la source
33
sys.getsizeofrenvoie le nombre d'octets que l'objet Python occupe en mémoire. Cela ne sera en aucun cas utile pour écrire dans un fichier.
Duncan
merci, mais sys.getsizeof (s) est juste la taille du fichier? ou la taille de l'objet python?
babykick
@Duncan alors pourquoi ne pas suggérer ce qui va être utile à la place?
cryanbhu
4
@cryanbhu Je ne sais pas pourquoi l'OP voulait la taille et cela affecterait la réponse, mais le plus utile serait probablement len(s.encode('utf8'))ou tout autre encodage qui sera utilisé lors de l'écriture dans le fichier. De plus, s'ils veulent également un null de fin, ils devront ajouter 1 pour cela.
Duncan
33

Python 3:

La réponse de user225312 est correcte:

A. Pour compter le nombre de caractères dans l' strobjet, vous pouvez utiliser la len()fonction:

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

B. Pour obtenir la taille de la mémoire en octets alloués pour stocker strobjet, vous pouvez utiliser la sys.getsizeof()fonction

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

Python 2:

Cela se complique pour Python 2.

A. La len()fonction en Python 2 renvoie le nombre d'octets alloués pour stocker les caractères codés dans un strobjet.

Parfois, il sera égal au nombre de caractères:

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

Mais parfois, ce n'est pas le cas:

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

C'est parce que strpeut utiliser l' encodage de longueur variable en interne. Donc, pour compter les caractères, strvous devez savoir quel encodage votre strobjet utilise. Ensuite, vous pouvez le convertir en unicodeobjet et obtenir le nombre de caractères:

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

B. La sys.getsizeof()fonction fait la même chose que dans Python 3 - elle retourne le nombre d'octets alloués pour stocker l'ensemble de l'objet chaîne

>>> print(getsizeof('йцы'))
27
>>> print(getsizeof('йцы'.decode('utf8')))
32
Igor Bendrup
la source
8
>>> s = 'abcd'
>>> len(s)
4
Michal Chruszcz
la source
2

Vous pouvez également utiliser str.len () pour compter la longueur de l'élément dans la colonne

data['name of column'].str.len() 
Vladimir Gavrysh
la source
1

La manière la plus pythonique est d'utiliser le len(). Gardez à l'esprit que le caractère «\» dans les séquences d'échappement n'est pas compté et peut être dangereux s'il n'est pas utilisé correctement.

>>> 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
la source