Gibt es eine Möglichkeit, eine Zeichenfolge von Großbuchstaben oder sogar von Großbuchstaben in Kleinbuchstaben umzuwandeln?
Zum Beispiel "Kilometer" → "Kilometer".
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()
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 .
Python 3 behandelt einfache String-Literale als Unicode:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
In Python 2 codiert das Folgende, das in eine Shell eingefügt wird, das Literal als eine Folge von Bytes mit utf-8
.
Und lower
ordnet 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
str
LiteraleWir benötigen also eine unicode
Zeichenfolge, um diese Konvertierung durchzuführen, die einfach mit einem Unicode-Zeichenfolgenliteral durchgeführt werden kann, das mit einem u
Präfix eindeutig ist (und beachten Sie, dass das u
Präfix auch in Python 3 funktioniert):
>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр
Beachten Sie, dass sich die Bytes vollständig von den str
Bytes unterscheiden. Auf das Escape-Zeichen '\u'
folgt die 2-Byte-Breite oder die 16-Bit-Darstellung dieser unicode
Buchstaben:
>>> 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 unicode
Konstruktor oder str.decode
Verfahrens mit dem Codec konvertieren das str
zu 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.
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.
Um die Kleinbuchstaben wieder in den Typ zu bringen str
, codieren Sie die Python-Zeichenfolge utf-8
erneut 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.
>>> "raison d'être".casefold(); "raison d'être"
Überprüfen Sie diese Antwort überunidecode
Mit Python 2 funktioniert dies nicht für nicht englische Wörter in UTF-8. In diesem Fall
decode('utf-8')
kann helfen:quelle
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: километр
Sie können auch einige Variablen überschreiben:
Wenn Sie so verwenden:
Es wird nur funktionieren, wenn es aufgerufen wird.
quelle
s=s.lower()
ist der Weg zu gehen.Versuchen Sie dies nicht, empfehlen Sie es nicht, tun Sie dies nicht:
Ausgabe:
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)):Ausgabe:
quelle