Existe-t-il un moyen de convertir une chaîne de majuscules, ou même une partie de majuscules en minuscules?
Par exemple, "Kilomètres" → "kilomètres".
Utilisation .lower()
- Par exemple:
s = "Kilometer"
print(s.lower())
La documentation officielle 2.x est ici:
La documentation officielle 3.x est ici:str.lower()
str.lower()
Comment convertir une chaîne en minuscules en Python?
Existe-t-il un moyen de convertir une chaîne entière entrée par l'utilisateur à partir de majuscules, ou même partiellement en majuscules en minuscules?
Ex. Kilomètres -> kilomètres
La manière canonique Pythonique de le faire est
>>> 'Kilometers'.lower()
'kilometers'
Cependant, si le but est de faire une correspondance insensible à la casse, vous devez utiliser le casse:
>>> '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
Il s'agit d'une méthode str en Python 3, mais en Python 2, vous voudrez regarder PyICU ou py2casefold - plusieurs réponses traitent de cela ici .
Python 3 gère les littéraux de chaîne simples comme unicode:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
En Python 2, le code ci-dessous, collé dans un shell, code le littéral sous la forme d'une chaîne d'octets, à l'aide de utf-8
.
Et lower
ne mappe pas les changements dont les octets seraient conscients, 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 s'opposera à ce que les octets non ascii (à partir de Python 2.5 et d'avertissement dans Python 2.4) se trouvent dans une chaîne sans codage donné, car le codage prévu serait ambigu. Pour en savoir plus à ce sujet, consultez la procédure Unicode dans les documents et PEP 263
str
littérauxNous avons donc besoin d'une unicode
chaîne pour gérer cette conversion, accomplie facilement avec un littéral de chaîne unicode, qui ambiguë avec un u
préfixe (et notez que le u
préfixe fonctionne également en Python 3):
>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр
Notez que les octets sont complètement différents des str
octets - le caractère d'échappement est '\u'
suivi par la largeur de 2 octets, ou la représentation 16 bits de ces unicode
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 ne l'avons que sous la forme d'un str
, nous devons le convertir en unicode
. Le type Unicode de Python est un format de codage universel qui présente de nombreux avantages par rapport à la plupart des autres codages. Nous pouvons soit utiliser le unicode
constructeur ou la str.decode
méthode avec le codec pour convertir le str
en 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 type unicode - et identiques à unicode_literal.
Il est recommandé de toujours travailler avec du texte en Unicode .
Le logiciel ne devrait fonctionner qu'avec des chaînes Unicode en interne, convertissant en un encodage particulier en sortie.
Cependant, pour récupérer le caractère en minuscules str
, encodez à utf-8
nouveau la chaîne python :
>>> 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')
километр
Ainsi, en Python 2, Unicode peut coder en chaînes Python et les chaînes Python peuvent décoder en type Unicode.
>>> "raison d'être".casefold(); "raison d'être"
Découvrez cette réponse concernantunidecode
Avec Python 2, cela ne fonctionne pas pour les mots non anglais en UTF-8. Dans ce cas,
decode('utf-8')
peut aider:la source
decode('utf-8')
non seulement n'est pas nécessaire en Python 3, mais provoque une erreur. ( réf ). Exemple:$python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'
Nous pouvons voir une deuxième façon de faire cela, en faisant référence à l'excellente réponse de @AaronHall.>>>s.casefold() #result: километр
Vous pouvez également remplacer certaines variables:
Si vous utilisez comme ceci:
Cela fonctionnera juste au moment de l'appel.
la source
s=s.lower()
est la voie à suivre.N'essayez pas ceci, totalement déconseillé, ne faites pas cela:
Production:
Puisque personne ne l'a encore écrit, vous pouvez l'utiliser
swapcase
(donc les lettres majuscules deviendront minuscules, et vice versa) (et celle-ci, vous devriez l'utiliser dans les cas où je viens de le mentionner (convertir le haut en bas, le bas en haut)):Production:
la source