Wie erhalte ich die Größe eines Strings in Python?

157

Zum Beispiel bekomme ich eine Zeichenfolge:

str = "please answer my question"

Ich möchte es in eine Datei schreiben.

Aber ich muss die Größe der Zeichenfolge kennen, bevor ich die Zeichenfolge in die Datei schreibe. Mit welcher Funktion kann ich die Größe der Zeichenfolge berechnen?

Babykick
quelle
1
"Mit welcher Funktion kann ich die Größe der Zeichenfolge berechnen?" Mit welchem ​​Tutorial lernst du Python? Bitte aktualisieren Sie die Frage mit einigen Informationen darüber, wo und wie Sie Python lernen.
S.Lott
1
Ich lerne Python selbst, jetzt weiß ich, dass len (str) die Größe des Strings zurückgeben kann. Die Größe hängt von der Codierung des Str ab.
Babykick

Antworten:

258

Wenn Sie über die Länge der Zeichenfolge sprechen, können Sie Folgendes verwenden len():

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

Wenn Sie die Größe der Zeichenfolge in Bytes benötigen, benötigen Sie sys.getsizeof():

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

Rufen Sie auch Ihre Zeichenfolgenvariable nicht auf str. Es schattiert die eingebaute str()Funktion.

user225312
quelle
33
sys.getsizeofGibt die Anzahl der Bytes zurück, die das Python-Objekt im Speicher belegt. Das ist unter keinen Umständen nützlich, um in eine Datei zu schreiben.
Duncan
danke, aber sys.getsizeof (s) ist nur die Größe der Datei? oder die Größe des Python-Objekts?
Babykick
@Duncan also wie wäre es mit einem Vorschlag, was stattdessen nützlich sein wird?
Cryanbhu
4
@cryanbhu Ich weiß nicht, warum das OP die Größe haben wollte und das würde die Antwort beeinflussen, aber wahrscheinlich am nützlichsten wäre len(s.encode('utf8'))oder welche andere Codierung auch immer beim Schreiben in die Datei verwendet wird. Wenn sie auch eine abschließende Null wünschen, müssen sie dafür 1 hinzufügen.
Duncan
33

Python 3:

Die Antwort von user225312 ist richtig:

A. Um die Anzahl der Zeichen im strObjekt zu zählen, können Sie folgende len()Funktionen verwenden:

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

B. Um die Speichergröße in Bytes zu ermitteln, die dem Speicherobjekt zugewiesen sind str, können Sie die sys.getsizeof()Funktion verwenden

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

Python 2:

Für Python 2 wird es kompliziert.

A. Die len()Funktion in Python 2 gibt die Anzahl der Bytes zurück, die zum Speichern codierter Zeichen in einem strObjekt zugewiesen wurden .

Manchmal entspricht es der Anzahl der Zeichen:

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

Aber manchmal wird es nicht:

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

Dies liegt daran, dass die Codierungstr mit variabler Länge intern verwendet werden kann. Um Zeichen zu zählen str, sollten Sie wissen, welche Codierung Ihr strObjekt verwendet. Dann können Sie es in ein unicodeObjekt konvertieren und die Anzahl der Zeichen ermitteln:

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

B. Die sys.getsizeof()Funktion macht dasselbe wie in Python 3 - sie gibt die Anzahl der Bytes zurück, die zum Speichern des gesamten Zeichenfolgenobjekts zugewiesen wurden

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

Sie können auch str.len () verwenden, um die Länge des Elements in der Spalte zu zählen

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

Der pythonischste Weg ist die Verwendung von len(). Beachten Sie, dass das Zeichen '\' in Escape-Sequenzen nicht gezählt wird und gefährlich sein kann, wenn es nicht richtig verwendet wird.

>>> 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
quelle