Apakah ada cara untuk mengubah string dari huruf besar, atau bahkan bagian huruf besar menjadi huruf kecil?
Misalnya, "Kilometer" → "kilometer".
Gunakan .lower()
- Misalnya:
s = "Kilometer"
print(s.lower())
Dokumentasi 2.x resmi ada di sini:
Dokumentasi resmi 3.x ada di sini:str.lower()
str.lower()
Bagaimana cara mengubah string menjadi huruf kecil dengan Python?
Apakah ada cara untuk mengubah seluruh string yang dimasukkan pengguna dari huruf besar, atau bahkan bagian huruf besar menjadi huruf kecil?
Misalnya Kilometer -> kilometer
Cara Pythonic kanonik untuk melakukan ini adalah
>>> 'Kilometers'.lower()
'kilometers'
Namun, jika tujuannya adalah untuk melakukan pencocokan case-sensitive, Anda harus menggunakan case-folding:
>>> 'Kilometers'.casefold()
'kilometers'
Inilah alasannya:
>>> "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
Ini adalah metode str dalam Python 3, tetapi dalam Python 2, Anda ingin melihat PyICU atau py2casefold - beberapa jawaban menjawab ini di sini .
Python 3 menangani string string literal sebagai unicode:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
Dalam Python 2, di bawah ini, disisipkan ke dalam shell, mengkodekan literal sebagai string byte, menggunakan utf-8
.
Dan lower
tidak memetakan perubahan apa pun yang akan disadari oleh byte, jadi kami mendapatkan string yang sama.
>>> 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()
Километр
Dalam skrip, Python akan keberatan dengan non-ascii (per Python 2.5, dan peringatan dalam Python 2.4) byte berada dalam string tanpa pengkodean yang diberikan, karena pengkodean yang dimaksud akan ambigu. Untuk lebih lanjut tentang itu, lihat Unicode how-to di dokumen dan PEP 263
str
literalJadi kita membutuhkan unicode
string untuk menangani konversi ini, diselesaikan dengan mudah dengan string unicode literal, yang disatukan dengan u
awalan (dan perhatikan u
awalan juga bekerja di Python 3):
>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр
Perhatikan bahwa byte benar-benar berbeda dari str
byte - karakter escape '\u'
diikuti oleh lebar 2-byte, atau representasi 16 bit dari unicode
huruf - huruf ini :
>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
Sekarang jika kita hanya memilikinya dalam bentuk a str
, kita perlu mengubahnya menjadi unicode
. Jenis Unicode Python adalah format penyandian universal yang memiliki banyak keunggulan relatif terhadap kebanyakan penyandian lainnya. Kita dapat menggunakan unicode
konstruktor atau str.decode
metode dengan codec untuk mengonversikan str
ke 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
Kedua metode dikonversi ke jenis unicode - dan sama dengan unicode_literal.
Disarankan agar Anda selalu bekerja dengan teks dalam Unicode .
Perangkat lunak hanya boleh bekerja dengan string Unicode secara internal, mengonversi ke pengkodean tertentu pada output.
Namun, untuk mendapatkan huruf kecil kembali ketik str
, encode string python ke utf-8
lagi:
>>> 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')
километр
Jadi dalam Python 2, Unicode dapat mengkodekan ke string Python, dan string Python dapat mendekode ke dalam tipe Unicode.
>>> "raison d'être".casefold(); "raison d'être"
Lihat jawaban ini tentangunidecode
Dengan Python 2, ini tidak berfungsi untuk kata-kata non-Inggris di UTF-8. Dalam hal ini
decode('utf-8')
dapat membantu:sumber
decode('utf-8')
tidak hanya tidak perlu dalam Python 3, tetapi menyebabkan kesalahan. ( ref ). Contoh:$python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'
Kita dapat melihat cara kedua untuk melakukan ini, merujuk jawaban yang sangat bagus dari @AaronHall.>>>s.casefold() #result: километр
Anda juga dapat menimpa beberapa variabel:
Jika Anda menggunakan seperti ini:
Ini akan berfungsi saat dipanggil.
sumber
s=s.lower()
adalah cara untuk pergi.Jangan coba ini, sama sekali tidak merekomendasikan, jangan lakukan ini:
Keluaran:
Karena belum ada yang menulisnya, Anda dapat menggunakan
swapcase
(jadi huruf besar akan menjadi huruf kecil, dan sebaliknya) (dan yang ini harus Anda gunakan dalam kasus di mana saya baru saja menyebutkan (konversi atas ke bawah, bawah ke atas)):Keluaran:
sumber