Come minuscole una stringa in Python?




python sostituire caratteri stringa (5)

Esiste un modo per convertire una stringa da maiuscole o anche parzialmente maiuscole in minuscole?

Es. Chilometri -> chilometri.


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

La documentazione ufficiale è str.lower() .


Puoi fare quello che Peter ha detto , o se vuoi che l'utente inserisca qualcosa, potresti fare il seguente codice:

raw_input('Type Something').lower()

Quindi convertirà automaticamente la stringa che hanno digitato in minuscolo.

Nota: raw_input stato rinominato in input in Python 3.xe versioni successive.


Come convertire la stringa in lettere minuscole in Python?

Esiste un modo per convertire un'intera stringa immessa dall'utente da maiuscole o anche parzialmente maiuscole minuscole?

Es. Chilometri -> chilometri

Il modo canonico di fare questo è Python

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

Tuttavia, se lo scopo è fare la corrispondenza senza distinzione tra maiuscole e minuscole, dovresti utilizzare la piegatura di maiuscole / minuscole:

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

Ecco perché:

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

Questo è un metodo str in Python 3, ma in Python 2, ti consigliamo di esaminare PyICU o py2casefold - diverse risposte affrontano questo argomento qui .

Unicode Python 3

Python 3 gestisce unicode come stringhe regolari:

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

Unicode Python 2

Ma Python 2 no, il sotto, incollato in una shell, codifica il letterale come una stringa di byte, usando utf-8 .

E lower non mappa le modifiche di cui gli oggetti Unicode nativi sarebbero a conoscenza, quindi otteniamo la stessa stringa.

>>> 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()
Километр

Negli script, Python obietterà a byte non-ascii (come in Python 2.5 e warning in Python 2.4) in una stringa senza alcuna codifica data, poiché la codifica desiderata sarebbe ambigua. Per ulteriori informazioni, consultare la guida Unicode nei docs e in PEP 263

Usa letterali Unicode, non str letterali

Quindi abbiamo bisogno di una stringa unicode per gestire questa conversione, realizzata facilmente con un letterale unicode:

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

Si noti che i byte sono completamente diversi dagli str byte: il carattere di escape è '\u' seguito dalla larghezza di 2 byte o dalla rappresentazione a 16 bit di queste lettere unicode :

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

Ora se lo abbiamo solo sotto forma di str , dobbiamo convertirlo in unicode . Il tipo Unicode di Python è un formato di codifica universale che presenta molti advantages rispetto alla maggior parte delle altre codifiche. Possiamo usare il costruttore unicode o il metodo str.decode con il codec per convertire lo str in 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

Entrambi i metodi vengono convertiti nel tipo Unicode e nello stesso modo in unicode_literal.

Best Practice, usa Unicode

Si consiglia di lavorare sempre con il testo in Unicode .

Il software dovrebbe funzionare solo con le stringhe Unicode internamente, convertendo in una particolare codifica in uscita.

Può codificare quando necessario

Tuttavia, per riportare il carattere minuscolo in str , codifica nuovamente la stringa python su 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')
километр

Quindi in Python 2, Unicode può codificare in stringhe Python e le stringhe Python possono decodificare nel tipo Unicode.


Con Python 2, questo non funziona per le parole non inglesi in UTF-8. In questo caso la decode('utf-8') può aiutare:

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

Non provarlo, assolutamente sconsigliato, non farlo:

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

Produzione:

abcd

Poiché nessuno lo ha ancora scritto, puoi usare swapcase (le lettere maiuscole diventeranno minuscole e viceversa) (e questa dovrebbe essere usata nei casi in cui ho appena menzionato (converti in alto in basso, in basso in alto)):

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

Produzione:

abcd




lowercase