Existe-t-il un moyen de convertir une chaîne de majuscule, ou même une partie de majuscule en minuscule?
Par exemple, "Kilomètres" → "kilomètres".
Utilisez .lower()
- Par exemple:
s = "Kilometer"
print(s.lower())
La documentation officielle 2.x est ici: str.lower()
La documentation officielle 3.x est ici: str.lower()
Avec Python 2, cela ne fonctionne pas pour les mots non anglais en UTF-8. Dans ce cas, decode('utf-8')
peut vous aider:
>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр
Comment convertir une chaîne en minuscule en Python?
Existe-t-il un moyen de convertir une chaîne saisie par un utilisateur entier en majuscule, ou même une partie en majuscule en minuscule?
Par exemple. Kilomètres -> kilomètres
La manière canonique de le faire est de
_>>> 'Kilometers'.lower()
'kilometers'
_
Toutefois, si le but est de faire de la correspondance insensible à la casse, vous devez utiliser la 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
_
C'est une méthode str dans Python 3, mais dans Python 2, vous voudrez vous pencher sur PyICU ou py2casefold - plusieurs réponses traitent cette question ici .
Python traite les littéraux de chaîne simples comme unicode:
_>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
_
Dans Python 2, le texte ci-dessous, collé dans un shell, code le littéral sous forme de chaîne d'octets, à l'aide de utf-8
.
Et lower
ne mappe aucune modification dont les octets auraient connaissance, 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 aux octets non-ascii (à partir de Python 2.5, et en avertissant dans Python 2.4) les octets étant dans une chaîne sans codage, puisque le codage prévu serait ambigu. Pour plus d'informations à ce sujet, consultez la procédure Unicode dans docs et PEP 26
str
littérauxNous avons donc besoin d’une chaîne unicode
pour gérer cette conversion, facilement réalisée avec un littéral de chaîne unicode, qui se démarque avec un préfixe u
(et notez que le préfixe u
fonctionne également dans 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 de la largeur sur 2 octets ou de 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 l’avons seulement sous la forme d’un str
, nous devons le convertir en unicode
. Le type Unicode de Python est un format de codage universel comportant de nombreux avantages par rapport à la plupart des autres codages. Nous pouvons utiliser le constructeur unicode
ou la méthode _str.decode
_ 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 identique à 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, en convertissant un codage particulier en sortie.
Toutefois, pour obtenir les minuscules dans le type str
, codez à nouveau la chaîne python en _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')
километр
_
Ainsi, dans Python 2, Unicode peut coder en Python chaînes, et les chaînes Python peuvent être décodées en type Unicode.
Vous pouvez faire ce que Peter dit , ou si vous voulez que l'utilisateur entre quelque chose, vous pouvez faire le code ci-dessous:
raw_input('Type Something').lower()
Il convertira ensuite automatiquement la chaîne saisie en minuscule.
Remarque: raw_input
a été renommé en input
dans Python 3.x et versions ultérieures.
En outre, vous pouvez écraser 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 au moment de l'appel.
N'essayez pas ceci, totalement déconseillé, ne faites pas ceci:
import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))
Sortie:
abcd
Comme personne ne l’a encore écrit, vous pouvez utiliser swapcase
(les lettres majuscules deviendront alors en minuscules, et vice versa) (et vous devriez l’utiliser dans les cas où je viens de mentionner (convertir majuscule en minuscule, minuscule en minuscule)) :
s='ABCD'
print(s.swapcase())
Sortie:
abcd