Comment convertir une chaîne de caractères en minuscules, en Python
y a-t-il un moyen de convertir une chaîne de majuscules, ou même une partie de majuscules en minuscules?
E. G. Kilomètres -- > kilomètres.
7 réponses
s = "Kilometer"
print(s.lower())
la documentation officielle est str.lower()
.
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()
километр
comment convertir une chaîne de caractères en minuscules en Python?
y a-t-il un moyen de convertir une chaîne entière entrée par un utilisateur de uppercase, ou même une partie de uppercase en lowercase?
E. G. Kilomètres -- > kilomètres
canoniques Pythonic façon de le faire est
>>> 'Kilometers'.lower()
'kilometers'
cependant, si le but est de faire l'appariement insensible à la casse, vous devez utiliser cas de pliage:
>>> '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 En Python 3, mais en Python 2, vous voudrez regarder le PyICU ou py2casefold - plusieurs réponses s'adressent à ce ici .
Unicode Python 3
Python 3 gère l'unicode comme régulière chaînes:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
Unicode Python 2
mais Python 2 n'encode pas, le dessous, collé dans un shell, le littéral comme une chaîne d'octets, en utilisant utf-8
.
et lower
ne correspond à aucun changement connu par les objets natifs Unicode, nous obtenons donc la même chaîne de caractères.
>>> 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'objectera aux octets non-ascii (à partir de python 2.5, et warning en Python 2.4) étant dans une chaîne sans encodage étant donné que le codage prévu serait ambigu. Pour plus d'informations sur ce sujet, voir L'Unicode how-to dans les docs et PEP 263
Utiliser l'Unicode des littéraux, pas str
littéraux
nous avons donc besoin d'une chaîne de caractères unicode
pour gérer cette conversion, effectuée facilement avec un Unicode littéral:
>>> unicode_literal = u'Километр'
>>> print unicode_literal.lower()
километр
notez que les octets sont complètement différents de la str
octets - le caractère d'échappement est '\u'
, suivi par les 2 octets largeur, ou 16 bits de la représentation 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 d'encodage universel qui a de nombreux avantages par rapport à la plupart des autres encodages. Nous pouvons utiliser le constructeur unicode
ou 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 se convertissent au type unicode - et sont identiques à unicode_literal.
meilleure pratique, utiliser Unicode
il est recommandé que vous toujours travailler avec le texte en Unicode .
le Logiciel ne doit fonctionner qu'avec des chaînes Unicode internes, en se convertissant à un particulier encodage sur la sortie.
peut encoder en arrière si nécessaire
Cependant, pour obtenir la minuscule de nouveau dans le type str
, encodez la chaîne de python à utf-8
encore une fois:
>>> 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 encoder dans des chaînes Python, et les chaînes Python peuvent décoder dans le type Unicode.
vous pouvez faire ce que Pierre a 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 alors automatiquement la chaîne qu'ils ont tapée en minuscules.
Note: raw_input
a été renommé en input
en Python 3.x et au-dessus.
vous pouvez aussi écraser certaines variables:
s = input('UPPER CASE')
lower = s.lower()
si vous utilisez comme ceci:
s = "Kilometer"
print(s.lower()) - kilometer
print(s) - Kilometer
ça marchera quand on l'appellera.
string.lower()
est utilisé pour transformer une chaîne en minuscule string.
par exemple:
word = "Turn Th!S !nt0 a L0w3rCas3! $string"
print(word.lower())
Dans ce cas, tous les alphabets seront convertis en minuscules alphabets.
si le texte entier est en majuscules comme "kilomètre", et que vous voulez seulement que le premier caractère soit en minuscules, alors faites
text = "KILOMETER"
result = text[:1] + text[1:].lower()
print(result)
mais pour réduire la chaîne entière, faire
text = "KILOMETER"
text = text.lower()
print(text)