Question Comment convertir une chaîne en minuscule en Python


Existe-t-il un moyen de convertir une chaîne de majuscules, ou même de majuscules en minuscules?

Par exemple. Kilomètres -> kilomètres.


1480
2017-07-23 03:08


origine


Réponses:


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

La documentation officielle est str.lower().


2325
2017-07-23 03:09



Avec Python 2, cela ne fonctionne pas pour les mots non-anglais en UTF-8. Dans ce cas decode('utf-8') peut aider:

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

158
2017-10-03 08:02



Comment convertir une chaîne en minuscule en Python?

Existe-t-il un moyen de convertir une chaîne entière saisie par l'utilisateur en majuscules, ou même en majuscules en minuscules?

Par exemple. Kilomètres -> kilomètres

La façon canonique Pythonic de le faire est

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

Cependant, si le but est de faire une correspondance insensible à la casse, vous devez utiliser le casse-pli:

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

Voici pourquoi:

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

Ceci est une méthode str dans Python 3, mais dans Python 2, vous aurez envie de regarder le PyICU ou py2casefold - plusieurs réponses abordent ceci ici.

Unicode Python 3

Python 3 gère unicode comme des chaînes régulières:

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

Unicode Python 2

Mais Python 2 n'est pas, ci-dessous, collé dans un shell, code le littéral comme une chaîne d'octets, en utilisant utf-8.

Et lower ne mappe pas les modifications que les objets Unicode natifs connaissent, nous obtenons donc la même chaîne.

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

Dans les scripts, Python va s'opposer aux non-ascii (à partir de Python 2.5, et à l'avertissement dans Python 2.4) les octets étant dans une chaîne sans encodage donné, puisque le codage prévu serait ambigu. Pour en savoir plus à ce sujet, voir le mode d'emploi Unicode dans le docs et PEP 263

Utiliser les littéraux Unicode, pas str littéraux

Nous avons donc besoin d'un unicode chaîne pour gérer cette conversion, réalisée facilement avec un littéral Unicode:

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

Notez que les octets sont complètement différents de str octets - le caractère d'échappement est '\u' suivi de la largeur de 2 octets ou de la représentation 16 bits de ces unicode des lettres:

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

Maintenant, si nous l'avons seulement sous la forme d'un str, nous devons le convertir en unicode. Le type Unicode de Python est un format d'encodage universel qui a beaucoup avantages par rapport à la plupart des autres encodages. Nous pouvons soit utiliser le unicode constructeur ou str.decode méthode avec le codec pour convertir le str à 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

Les deux méthodes sont converties en unicode - et identiques à unicode_literal.

Meilleure pratique, utilisez Unicode

Il est recommandé que vous toujours travailler avec du texte en Unicode.

Le logiciel ne doit fonctionner qu'avec les chaînes Unicode en interne, en convertissant un encodage particulier en sortie.

Peut encoder en arrière si nécessaire

Cependant, pour récupérer le minuscule dans le type str, encoder la chaîne python à utf-8 encore:

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

Donc, dans Python 2, Unicode peut encoder dans des chaînes Python, et les chaînes Python peuvent décoder dans le type Unicode.


104
2017-07-23 22:40



Tu peux faire quoi Peter a ditou si vous voulez que l'utilisateur saisisse quelque chose, vous pouvez faire le code ci-dessous:

raw_input('Type Something').lower()

Il convertira alors automatiquement la chaîne qu'ils ont tapée en minuscules.

Remarque: raw_inputa été renommé en input en Python 3.x et supérieur.


70
2017-07-23 04:34



En outre, vous pouvez remplacer certaines variables:

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

Si vous utilisez comme ceci:

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

Cela fonctionnera juste quand appelé.


17
2017-11-18 18:35



string.lower() est utilisé pour transformer une chaîne en une chaîne minuscule.

par exemple:

word = "Turn Th!S !nt0 a L0w3rCas3! $string"
print(word.lower())

Dans ce cas, tous les alphabets seront convertis en alphabets minuscules.


0
2017-07-16 12:12



Si le texte entier est en majuscule comme "KILOMETER", et que vous voulez seulement que le premier caractère soit en minuscule, faites

text = "KILOMETER"
result = text[:1] + text[1:].lower() 
print(result)

Mais pour minuscules toute la chaîne, faites

text = "KILOMETER"
text = text.lower()
print(text)

-1
2018-02-28 22:49