it-swarm.com.de

Wie kann ich in Python einen String in Kleinbuchstaben schreiben?

Gibt es eine Möglichkeit, eine Zeichenfolge von Großbuchstaben oder teilweise von Großbuchstaben in Kleinbuchstaben zu konvertieren?

Zum Beispiel "Kilometer" → "Kilometer".

1854
Benjamin Didur

Verwenden Sie .lower() - Zum Beispiel:

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

Die offizielle 2.x Dokumentation ist hier: str.lower()
Die offizielle 3.x Dokumentation ist hier: str.lower()

2848
Petar Ivanov

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

>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр
195

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 einen Teil von Großbuchstaben in Kleinbuchstaben zu konvertieren?

Z.B. Kilometer -> Kilometer

Die kanonische pythonische Art, dies zu tun, ist

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

Wenn Sie jedoch einen Vergleich durchführen möchten, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, sollten Sie case-folding 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 adressieren dies hier .

Unicode Python 3

Python behandelt einfache String-Literale als Unicode:

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

Python 2, einfache String-Literale sind Bytes

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

Und lower ordnet keine Änderungen zu, die den Bytes bekannt wären, sodass wir den gleichen String 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), die sich in einer Zeichenfolge ohne Kodierung befinden. da die beabsichtigte Codierung mehrdeutig wäre. Weitere Informationen hierzu finden Sie in der Unicode-Anleitung in docs und PEP 26

Verwenden Sie Unicode-Literale, nicht str Literale

Für diese Konvertierung benötigen wir also einen unicode -String, der leicht mit einem Unicode-String-Literal durchgeführt werden kann, das mit einem u -Präfix eindeutig ist (und das u -Präfix funktioniert auch in Python 3):

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

Beachten Sie, dass sich die Bytes vollständig von den str Bytes unterscheiden - das Escape-Zeichen ist _'\u'_ gefolgt von der 2-Byte-Breite oder der 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 nur in Form eines str haben, müssen wir es in unicode konvertieren. Pythons Unicode-Typ ist ein universelles Codierungsformat, das im Vergleich zu den meisten anderen Codierungen viele Vorteile aufweist. Wir können entweder den Konstruktor unicode oder die Methode _str.decode_ mit dem Codec verwenden, um str in unicode zu konvertieren:

_>>> 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 sind mit dem Unicode-Literal identisch.

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ückkodieren

Um den Kleinbuchstaben jedoch wieder in Typ str zu erhalten, codieren Sie den String pythonerneut in _utf-8_:

_>>> 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 Zeichenfolgen codieren, und Python Zeichenfolgen können in den Unicode-Typ decodiert werden.

192
Aaron Hall

Sie können tun, was sagte Peter , oder wenn Sie möchten, dass der Benutzer etwas eingibt, können Sie den folgenden Code eingeben:

raw_input('Type Something').lower()

Die eingegebene Zeichenfolge wird dann automatisch in Kleinbuchstaben umgewandelt.

Hinweis: raw_input wurde in Python 3.x und höher in input umbenannt.

66
user735977

Sie können auch einige Variablen überschreiben:

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

Wenn Sie wie folgt verwenden:

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

Es wird nur funktionieren, wenn es aufgerufen wird.

18
ergo

Probieren Sie das nicht aus, empfehlen Sie es nicht weiter:

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 swapcase verwenden (sodass Großbuchstaben in Kleinbuchstaben umgewandelt werden und umgekehrt) (und diese sollten Sie in Fällen verwenden, in denen ich gerade erwähnt habe (konvertieren von Großbuchstaben in Kleinbuchstaben, Kleinbuchstaben in Großbuchstaben)). :

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

Ausgabe:

abcd
2
U10-Forward