Vraag Hoe om te zetten string naar kleine letters in Python


Is er een manier om een ​​string te converteren van hoofdletters, of zelfs een hoofdletter in kleine letters te zetten?

Bijv. Kilometers -> kilometer.


1480
2017-07-23 03:08


oorsprong


antwoorden:


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

De officiële documentatie is str.lower().


2325
2017-07-23 03:09



Met Python 2 werkt dit niet voor niet-Engelse woorden in UTF-8. In dit geval decode('utf-8') kan helpen:

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

158
2017-10-03 08:02



Hoe om te zetten string naar kleine letters in Python?

Is er een manier om een ​​volledige door de gebruiker ingevoerde string te converteren van hoofdletters, of zelfs een hoofdletter in kleine letters op te nemen?

Bijv. Kilometers -> kilometer

De canonieke Pythonische manier om dit te doen is

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

Als het echter de bedoeling is om niet-hoofdlettergevoelige overeenkomsten te maken, moet u case-folding gebruiken:

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

Dit is waarom:

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

Dit is een str-methode in Python 3, maar in Python 2 wil je de Pyicu of py2casefold bekijken - verschillende antwoorden pakken dit hier aan.

Unicode Python 3

Python 3 handelt unicode af als reguliere reeksen:

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

Unicode Python 2

Maar Python 2 plakt niet, de onderstaande, geplakt in een schaal, codeert de letterlijke als een reeks bytes, met behulp van utf-8.

En lower brengt geen wijzigingen in kaart die inheemse Unicode-objecten zouden kennen, dus we krijgen dezelfde reeks.

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

In scripts zal Python bezwaar maken tegen niet-ascii (vanaf Python 2.5 en waarschuwing in Python 2.4) bytes in een string zonder gegeven codering, omdat de bedoelde codering dubbelzinnig zou zijn. Zie voor meer informatie de Unicode-instructie in de docs en PEP 263

Gebruik Unicode-letterwoorden, niet str letterlijke

Dus we hebben een unicode string om deze conversie aan te kunnen, gemakkelijk uitgevoerd met een letterlijke unicode:

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

Merk op dat de bytes totaal verschillend zijn van de str bytes - het escape-personage is '\u' gevolgd door de 2-byte breedte of 16 bit-weergave hiervan unicode brieven:

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

Nu, als we het alleen hebben in de vorm van een str, we moeten het converteren naar unicode. Het Unicode-type van Python is een universeel coderingsformaat dat er veel heeft voordelen ten opzichte van de meeste andere coderingen. We kunnen de unicode constructor of str.decode methode met de codec om het te converteren str naar 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

Beide methoden converteren naar het unicode-type - en hetzelfde als de unicode_literal.

Best Practice, gebruik Unicode

Het wordt aanbevolen dat u altijd werken met tekst in Unicode.

Software zou alleen intern met Unicode-reeksen moeten werken en naar een bepaalde codering op uitvoer moeten converteren.

Kan waar nodig coderen

Om de kleine letter terug te krijgen in type str, codeer de python-string naar utf-8 nog een keer:

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

Dus in Python 2 kan Unicode coderen voor Python-strings en Python-strings kunnen in het Unicode-type worden gedecodeerd.


104
2017-07-23 22:40



Je kunt wat doen Peter zei, of als u wilt dat de gebruiker iets invoert, kunt u de onderstaande code gebruiken:

raw_input('Type Something').lower()

Het zet dan automatisch de string die ze hebben getypt in kleine letters.

Notitie: raw_inputis hernoemd naar input in Python 3.x en hoger.


70
2017-07-23 04:34



U kunt ook enkele variabelen overschrijven:

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

Als je dit als volgt gebruikt:

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

Het werkt net als hij wordt gebeld.


17
2017-11-18 18:35



string.lower() wordt gebruikt om van een string een kleine letterreeks te maken.

bijvoorbeeld:

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

In dit geval worden alle alfabetten geconverteerd naar kleine letters alfabetten.


0
2017-07-16 12:12



Als de hele tekst in hoofdletters is zoals "KILOMETER" en u alleen het eerste teken wilt laten uitdraaien, doet u het volgende:

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

Maar om de hele reeks in kleine letters te plaatsen, doe

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

-1
2018-02-28 22:49