Wie kann ich eine Zeichenfolge in Python in Kleinbuchstaben schreiben?

2056

Gibt es eine Möglichkeit, eine Zeichenfolge von Großbuchstaben oder sogar von Großbuchstaben in Kleinbuchstaben umzuwandeln?

Zum Beispiel "Kilometer" → "Kilometer".

Benjamin Didur
quelle

Antworten:

3087

Verwendung .lower()- Zum Beispiel:

s = "Kilometer"
print(s.lower())

Die offizielle 2.x-Dokumentation finden Sie hier: Die offizielle 3.x-Dokumentation finden Sie hier:str.lower()
str.lower()

Petar Ivanov
quelle
259

Wie konvertiere ich einen String in Python in Kleinbuchstaben?

Gibt es eine Möglichkeit, eine gesamte vom Benutzer eingegebene Zeichenfolge von Großbuchstaben oder sogar von Großbuchstaben in Kleinbuchstaben umzuwandeln?

ZB Kilometer -> Kilometer

Die kanonische pythonische Art, dies zu tun, ist

>>> 'Kilometers'.lower()
'kilometers'

Wenn der Zweck jedoch darin besteht, die Groß- und Kleinschreibung nicht zu berücksichtigen, sollten Sie die Groß- und Kleinschreibung verwenden:

>>> 'Kilometers'.casefold()
'kilometers'

Hier ist der Grund:

>>> "Maße".casefold()
'masse'
>>> "Maße".lower()
'maße'
>>> "MASSE" == "Maße"
False
>>> "MASSE".lower() == "Maße".lower()
False
>>> "MASSE".casefold() == "Maße".casefold()
True

Dies ist eine str-Methode in Python 3, aber in Python 2 sollten Sie sich die PyICU oder py2casefold ansehen - mehrere Antworten sprechen dies hier an .

Unicode Python 3

Python 3 behandelt einfache String-Literale als Unicode:

>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'

Python 2, einfache String-Literale sind Bytes

In Python 2 codiert das Folgende, das in eine Shell eingefügt wird, das Literal als eine Folge von Bytes mit utf-8.

Und lowerordnet keine Änderungen zu, die Bytes bekannt wären, sodass wir dieselbe Zeichenfolge erhalten.

>>> string = 'Километр'
>>> string
'\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> string.lower()
'\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> print string.lower()
Километр

In Skripten widerspricht Python Nicht-ASCII-Bytes (ab Python 2.5 und Warnung in Python 2.4) in einer Zeichenfolge ohne angegebene Codierung, da die beabsichtigte Codierung nicht eindeutig wäre. Weitere Informationen hierzu finden Sie in der Unicode- Anleitung in den Dokumenten und in PEP 263

Verwenden Sie Unicode-Literale, keine strLiterale

Wir benötigen also eine unicodeZeichenfolge, um diese Konvertierung durchzuführen, die einfach mit einem Unicode-Zeichenfolgenliteral durchgeführt werden kann, das mit einem uPräfix eindeutig ist (und beachten Sie, dass das uPräfix auch in Python 3 funktioniert):

>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр

Beachten Sie, dass sich die Bytes vollständig von den strBytes unterscheiden. Auf das Escape-Zeichen '\u'folgt die 2-Byte-Breite oder die 16-Bit-Darstellung dieser unicodeBuchstaben:

>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'

Wenn wir es jetzt nur in Form von a haben str, müssen wir es in konvertieren unicode. Der Unicode-Typ von Python ist ein universelles Codierungsformat, das gegenüber den meisten anderen Codierungen viele Vorteile bietet . Wir können entweder die Verwendung unicodeKonstruktor oder str.decodeVerfahrens mit dem Codec konvertieren das strzu unicode:

>>> unicode_from_string = unicode(string, 'utf-8') # "encoding" unicode from string
>>> print(unicode_from_string.lower())
километр
>>> string_to_unicode = string.decode('utf-8') 
>>> print(string_to_unicode.lower())
километр
>>> unicode_from_string == string_to_unicode == unicode_literal
True

Beide Methoden werden in den Unicode-Typ konvertiert - und entsprechen dem unicode_literal.

Best Practice, verwenden Sie Unicode

Es wird empfohlen, immer mit Text in Unicode zu arbeiten .

Software sollte nur intern mit Unicode-Zeichenfolgen arbeiten und bei der Ausgabe in eine bestimmte Codierung konvertieren.

Kann bei Bedarf zurückcodieren

Um die Kleinbuchstaben wieder in den Typ zu bringen str, codieren Sie die Python-Zeichenfolge utf-8erneut in:

>>> print string
Километр
>>> string
'\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> string.decode('utf-8')
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> string.decode('utf-8').lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> string.decode('utf-8').lower().encode('utf-8')
'\xd0\xba\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> print string.decode('utf-8').lower().encode('utf-8')
километр

In Python 2 kann Unicode in Python-Strings und Python-Strings in den Unicode-Typ decodieren.

Aaron Hall
quelle
Ich habe eine Anmerkung, die nicht unbedingt für die Frage des OP gilt, die jedoch für die Portabilität (Internationalisierung) wichtig ist, wenn ein Matching ohne Berücksichtigung der Groß- und Kleinschreibung durchgeführt wird. Bei der Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung können diakritische Zeichen (Akzentzeichen) zu einem Problem werden. Beispiel: >>> "raison d'être".casefold(); "raison d'être"Überprüfen Sie diese Antwort überunidecode
bballdave025
198

Mit Python 2 funktioniert dies nicht für nicht englische Wörter in UTF-8. In diesem Fall decode('utf-8')kann helfen:

>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр
Vladimir Gorovoy
quelle
8
Vielleicht sollten wir etwas expliziter sagen, dass dies decode('utf-8')nicht nur in Python 3 unnötig ist, sondern auch einen Fehler verursacht. ( ref ). Beispiel: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'Wir sehen einen zweiten Weg, dies zu tun, indem wir auf die hervorragende Antwort von @AaronHall verweisen. >>>s.casefold() #result: километр
bballdave025
20

Sie können auch einige Variablen überschreiben:

s = input('UPPER CASE')
lower = s.lower()

Wenn Sie so verwenden:

s = "Kilometer"
print(s.lower())     - kilometer
print(s)             - Kilometer

Es wird nur funktionieren, wenn es aufgerufen wird.

Ergo
quelle
10
Die Frage ist, wie man einen String in Kleinbuchstaben umwandelt. Wie hat diese Antwort so viele Stimmen bekommen?
Munim Munna
1
s=s.lower()ist der Weg zu gehen.
m00lti
1

Versuchen Sie dies nicht, empfehlen Sie es nicht, tun Sie dies nicht:

import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))

Ausgabe:

abcd

Da es noch niemand geschrieben hat, können Sie es verwenden swapcase(so werden Großbuchstaben in Kleinbuchstaben umgewandelt und umgekehrt) (und dieses sollten Sie in Fällen verwenden, in denen ich es gerade erwähnt habe (Konvertieren von oben nach unten, von unten nach oben)):

s='ABCD'
print(s.swapcase())

Ausgabe:

abcd
U10-Vorwärts
quelle