Jak przekonwertować ciąg znaków na małe litery w Pythonie

Czy istnieje sposób na konwersję łańcucha z wielkich liter,a nawet części wielkich liter na małe?

Np. kilometry --> kilometry.

Author: codeforester, 2011-07-23

7 answers

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

Oficjalna dokumentacja jest str.lower().

 2432
Author: Petar Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-30 21:52:24

W Pythonie 2, to nie działa dla nie - angielskich słów w UTF-8. W tym przypadku decode('utf-8') może pomóc:

>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр
 162
Author: Vladimir Gorovoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-21 11:41:57

Jak przekonwertować string na małe litery w Pythonie?

Czy jest jakiś sposób na przekonwertowanie całego wprowadzonego przez użytkownika ciągu znaków z wielkich liter lub nawet części wielkich liter na małe litery?

Np. kilometry -- > kilometry

Kanonicznym sposobem na to jest

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

Jednak, jeśli celem jest dopasowanie nieczułych wielkości liter, należy użyć case-folding:

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

Oto dlaczego:

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

Jest to metoda str w Pythonie 3, ale w Pythonie 2, będziesz chciał spojrzeć na PyICU lub py2casefold- kilka odpowiedzi odnosi się do tego tutaj .

Unicode Python 3

Python 3 obsługuje unicode jako zwykłe ciągi znaków:

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

Unicode Python 2

Ale Python 2 nie, poniższy, wklejony do powłoki, koduje literał jako ciąg bajtów, używając utf-8.

I lower nie mapuje żadnych zmian, które natywne Obiekty Unicode byłyby świadome, więc otrzymujemy ten sam sznurek.

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

W skryptach, Python będzie sprzeciwiał się nie-ascii (od Pythona 2.5, A ostrzeżenie w Pythonie 2.4) bajtów będących w łańcuchu znaków bez podanego kodowania, ponieważ zamierzone kodowanie byłoby niejednoznaczne. Aby uzyskać więcej informacji, zobacz instrukcje Unicode w docs i PEP 263

Używaj literałów Unicode, Nie str literały

Więc potrzebujemy unicode ciąg znaków, aby obsłużyć tę konwersję, wykonaną łatwo za pomocą literału unicode:

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

Uwaga że bajty są zupełnie inne od str bajtów - znakiem escape jest '\u', po którym następuje 2-bajtowa szerokość lub 16-bitowa reprezentacja tych unicode liter:

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

Teraz, jeśli mamy go tylko w formie str, musimy przekształcić go w unicode. Typ Unicode Pythona jest uniwersalnym formatem kodowania, który ma wiele zalet w stosunku do większości innych kodowań. Możemy użyć konstruktora unicode lub metody str.decode z kodekiem, aby przekonwertować str na 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

Obie metody konwertują na typ unicode - i taki sam jak unicode_literal.

Najlepsza praktyka, użyj Unicode

Zaleca się, aby zawsze pracować z tekstem w Unicode .

Oprogramowanie powinno działać tylko wewnętrznie z łańcuchami Unicode, konwertując je do określonego kodowania na wyjściu.

Może kodować z powrotem, gdy jest to konieczne

Jednak, aby odzyskać małe litery w typie str, Zakoduj łańcuch Pythona do utf-8 jeszcze raz:

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

Więc w Pythonie 2, Unicode może kodować do ciągów Pythona, a ciągi Pythona mogą dekodować do typu Unicode.

 113
Author: Aaron Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 16:39:59

Możesz zrobić to, co powiedział Peter , lub jeśli chcesz, aby użytkownik coś wprowadził, możesz wykonać poniższy kod:

raw_input('Type Something').lower()

Zostanie automatycznie przekonwertowany napis na małe litery.

Uwaga: raw_input został przemianowany na input w Pythonie 3.x i wyżej.

 71
Author: U9-Forward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-04 10:47:45

Możesz także nadpisać niektóre zmienne:

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

Jeśli używasz w ten sposób:

s = "Kilometer"
print(s.lower())     - kilometer
print(s)             - Kilometer
Będzie działać tylko wtedy, gdy zostanie wywołana.
 19
Author: ergo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-08 07:27:35

string.lower() służy do zamiany łańcucha znaków na małe litery.

Na przykład:

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

W tym przypadku wszystkie alfabety zostaną przekonwertowane na małe litery.

 0
Author: Zeeshan Adil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 12:12:09

Jeśli cały tekst jest pisany wielkimi literami jak "kilometr", a chcesz tylko, aby pierwszy znak był pisany małymi literami, wykonaj

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

Ale aby zapisać cały łańcuch, wykonaj

text = "KILOMETER"
text = text.lower()
print(text)
 -2
Author: Supercolbat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-01 17:17:50