Bir dizeyi büyük harften, hatta kısmen büyük harfe küçük harfe dönüştürmenin bir yolu var mı?
Örneğin, "Kilometre" → "kilometre".
Bir dizeyi büyük harften, hatta kısmen büyük harfe küçük harfe dönüştürmenin bir yolu var mı?
Örneğin, "Kilometre" → "kilometre".
Yanıtlar:
Kullan .lower()
- Örneğin:
s = "Kilometer"
print(s.lower())
Resmi 2.x belgeleri burada:
Resmi 3.x belgeleri burada:str.lower()
str.lower()
Nasıl dize Python küçük harf dönüştürmek için?
Kullanıcının girdiği dizenin tamamını büyük harften, hatta kısmen büyük harfe küçük harfe dönüştürmenin herhangi bir yolu var mı?
Eg Kilometre -> kilometre
Bunu yapmanın kanonik Pythonic yolu
>>> 'Kilometers'.lower()
'kilometers'
Ancak, amaç büyük / küçük harfe duyarlı olmayan eşleştirme yapmaksa, büyük / küçük harf katlama kullanmalısınız:
>>> 'Kilometers'.casefold()
'kilometers'
İşte nedeni:
>>> "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
Bu Python 3'te bir str yöntemidir, ancak Python 2'de PyICU veya py2casefold'a bakmak isteyeceksiniz - birkaç cevap burada ele almaktadır .
Python 3 düz dize değişmezlerini unicode olarak işler:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
Python 2'de, bir kabuğa yapıştırılan aşağıdaki metin, değişmezi kullanarak bir bayt dizisi olarak kodlar utf-8
.
Baytların lower
bileceği hiçbir değişikliği haritalamaz, bu yüzden aynı dizeyi alırız.
>>> 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()
Километр
Komut dosyalarında Python, amaçlanan kodlama belirsiz olacağından, kodlama yapılmayan bir dizede olduğu gibi ascii olmayanlara (Python 2.5 ve Python 2.4'te uyarı) itiraz eder. Bununla ilgili daha fazla bilgi için dokümanlardaki Unicode nasıl yapılır bölümüne ve PEP 263'e bakın
str
değişmezlerini kullanmaBu nedenle unicode
, bir u
önekle net olmayan bir unicode dize değişmeziyle kolayca gerçekleştirilen bu dönüşümü işlemek için bir dizeye ihtiyacımız var (ve u
önekin Python 3'te de çalıştığını unutmayın ):
>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр
Baytların baytlardan tamamen farklı olduğuna dikkat edin str
- kaçış karakterinden '\u'
sonra 2 unicode
harflik genişlik veya bu harflerin 16 bitlik gösterimi gelir :
>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
Şimdi sadece a şeklinde varsa, onu str
dönüştürmemiz gerekir unicode
. Python'un Unicode tipi, diğer çoğu kodlamaya göre birçok avantaja sahip evrensel bir kodlama formatıdır . Bunu dönüştürmek için yapıcıyı unicode
veya str.decode
yöntemi codec bileşeni ile str
kullanabiliriz 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
Her iki yöntem de unicode türüne dönüştürülür ve unicode_literal ile aynıdır.
Unicode'da her zaman metinle çalışmanız önerilir .
Yazılım, yalnızca dahili olarak Unicode dizeleriyle çalışarak çıktıdaki belirli bir kodlamaya dönüştürmelidir.
Ancak, küçük harfleri tekrar yazmak str
için python dizesini utf-8
tekrar kodlayın :
>>> 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')
километр
Python 2'de, Unicode Python dizelerine kodlayabilir ve Python dizeleri Unicode türüne kod çözebilir.
Python 2 ile bu, UTF-8'deki İngilizce olmayan kelimeler için çalışmaz. Bu durumda decode('utf-8')
yardımcı olabilir:
>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр
decode('utf-8')
sadece Python 3'te gereksiz olmadığını, aynı zamanda bir hataya neden olduğunu söyleyerek biraz daha açık olmalıyız . ( ref ). Örnek: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'
@AaronHall'ın mükemmel cevabına atıfta bulunarak bunu yapmanın ikinci bir yolunu görebiliriz. >>>s.casefold() #result: километр
Ayrıca, bazı değişkenlerin üzerine yazabilirsiniz:
s = input('UPPER CASE')
lower = s.lower()
Eğer böyle kullanırsanız:
s = "Kilometer"
print(s.lower()) - kilometer
print(s) - Kilometer
Sadece çağrıldığında çalışır.
s=s.lower()
gitmek için bir yoldur.
Bunu denemeyin, tamamen tavsiye etmeyin, bunu yapma:
import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))
Çıktı:
abcd
Henüz kimse yazamadığı için kullanabilirsiniz swapcase
(böylece büyük harfler küçük harf olur ve tersi de geçerlidir) (ve bu sadece az önce bahsettiğim durumlarda kullanmalısınız (yukarıdan aşağıya, aşağıdan yukarıya dönüştür)):
s='ABCD'
print(s.swapcase())
Çıktı:
abcd
>>> "raison d'être".casefold(); "raison d'être"
Çıkış Bu cevabı hakkındaunidecode