Câu hỏi Cách chuyển đổi chuỗi thành chữ thường trong Python


Có cách nào để chuyển đổi một chuỗi từ chữ hoa, hoặc thậm chí một phần chữ hoa thành chữ thường?

Ví dụ. Kilômét -> km.


1486
2017-07-23 03:08


gốc


Một trường hợp sử dụng rất thú vị khác là chuyển đổi toàn bộ chuỗi thành chữ thường trừ ký tự đầu tiên. Nó có thể được thực hiện với str.capitalize(). Bài liên quan - python capitalize () trên một chuỗi bắt đầu bằng dấu cách & Làm cách nào để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi (Python)? - RBT


Các câu trả lời:


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

Tài liệu chính thức là str.lower().


2333
2017-07-23 03:09





Với Python 2, điều này không hoạt động đối với các từ không phải tiếng Anh trong UTF-8. Trong trường hợp này decode('utf-8') có thể giúp:

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

158
2017-10-03 08:02



Có lẽ chúng ta nên rõ ràng hơn một chút bằng cách nói rằng decode('utf-8') không chỉ không cần thiết trong Python 3, mà còn gây ra lỗi. (ref). Thí dụ: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode' Chúng ta có thể thấy một cách thứ hai để làm điều này, tham khảo câu trả lời tuyệt vời của @AaronHall. >>>s.casefold() #result: километр - bballdave025


Làm thế nào để chuyển đổi chuỗi thành chữ thường trong Python?

Có cách nào để chuyển đổi toàn bộ chuỗi người dùng đã nhập từ chữ hoa hay thậm chí một phần chữ hoa thành chữ thường không?

Ví dụ. Kilômét -> ki lô mét

Cách Pythonic kinh điển để làm điều này là

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

Tuy nhiên, nếu mục đích là để làm trường hợp phù hợp không nhạy cảm, bạn nên sử dụng trường hợp gấp:

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

Đây là lý do tại sao:

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

Đây là phương thức str trong Python 3, nhưng trong Python 2, bạn sẽ muốn xem xét PyICU hoặc py2casefold - một số câu trả lời giải quyết vấn đề này tại đây.

Unicode Python 3

Python 3 xử lý unicode như các chuỗi thông thường:

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

Unicode Python 2

Nhưng Python 2 không, bên dưới, được dán vào một trình bao, mã hóa chữ như một chuỗi các byte, bằng cách sử dụng utf-8.

lower không ánh xạ bất kỳ thay đổi nào mà các đối tượng Unicode nguyên gốc sẽ biết, vì vậy chúng tôi nhận được cùng một chuỗi.

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

Trong các kịch bản lệnh, Python sẽ phản đối các byte không phải ascii (như Python 2.5, và cảnh báo trong Python 2.4) trong một chuỗi không có mã hóa đã cho, vì mã hóa dự định sẽ không rõ ràng. Để biết thêm về điều đó, hãy xem cách thực hiện Unicode trong tài liệu và PEP 263

Sử dụng bảng chữ cái Unicode, không str chữ viết

Vì vậy, chúng ta cần một unicode chuỗi để xử lý chuyển đổi này, được thực hiện dễ dàng với một chữ unicode:

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

Lưu ý rằng các byte hoàn toàn khác với str byte - ký tự thoát là '\u' tiếp theo là chiều rộng 2 byte hoặc đại diện 16 bit của các unicode bức thư:

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

Bây giờ nếu chúng ta chỉ có nó dưới dạng một str, chúng ta cần chuyển đổi nó thành unicode. Loại Unicode của Python là định dạng mã hóa phổ quát có nhiều lợi thế liên quan đến hầu hết các mã hóa khác. Chúng ta có thể sử dụng unicode nhà xây dựng hoặc str.decode phương pháp với codec để chuyển đổi str đến 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

Cả hai phương thức đều chuyển thành kiểu unicode - và giống như unicode_literal.

Thực hành tốt nhất, sử dụng Unicode

Bạn nên luôn luôn làm việc với văn bản trong Unicode.

Phần mềm chỉ nên làm việc với các chuỗi Unicode trong nội bộ, chuyển đổi sang một mã hóa cụ thể trên đầu ra.

Có thể mã hóa lại khi cần thiết

Tuy nhiên, để lấy lại chữ thường theo kiểu str, mã hóa chuỗi python thành utf-8 lần nữa:

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

Vì vậy, trong Python 2, Unicode có thể mã hóa thành chuỗi Python và chuỗi Python có thể giải mã thành loại Unicode.


105
2017-07-23 22:40



Đây là câu trả lời hoàn chỉnh nhất, di động. Theo tôi, nó phải là đúng. Cảm ơn đặc biệt cho, "Tuy nhiên, nếu mục đích là để làm trường hợp phù hợp không nhạy cảm, bạn nên sử dụng trường hợp gấp" +1 - bballdave025
Tôi có một lưu ý rằng không nhất thiết phải áp dụng cho câu hỏi của OP, nhưng điều đó quan trọng với tính di động (quốc tế hóa) khi thực hiện khớp không phân biệt chữ hoa chữ thường. Với sự khớp không phân biệt dạng chữ, dấu phụ (dấu trọng âm) có thể trở thành một mối quan tâm. Thí dụ: >>> "raison d'être".casefold(); "raison d'être" Kiểm tra câu trả lời này trong khoảng unidecode - bballdave025


Bạn có thể làm gì Peter nóihoặc nếu bạn muốn người dùng nhập nội dung nào đó bạn có thể thực hiện mã dưới đây:

raw_input('Type Something').lower()

Sau đó, nó sẽ tự động chuyển đổi chuỗi mà họ đã nhập vào chữ thường.

Chú thích: raw_inputđã được đổi tên thành input trong Python 3.x trở lên.


70
2017-07-23 04:34



Lưu ý rằng không có "hoặc" về điều này, nó không phải là một kỹ thuật khác. input() trả về một chuỗi, sau đó bạn có thể áp dụng các phương thức chuỗi lên, giống như Petar đã chứng minh. - Félix Saparelli
Mở rộng câu hỏi không cần thiết; đây chỉ là về chữ thường và không phải là đầu vào - ppperry


Ngoài ra, bạn có thể ghi đè lên một số biến:

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

Nếu bạn sử dụng như thế này:

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

Nó sẽ hoạt động ngay khi được gọi.


17
2017-11-18 18:35



Câu hỏi là làm thế nào để chuyển đổi chuỗi thành chữ thường. Câu trả lời này có quá nhiều phiếu bầu như thế nào? - Munim Munna
s=s.lower() là con đường để đi. - m00lti


string.lower() được sử dụng để biến chuỗi thành chuỗi chữ thường.

ví dụ:

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

Trong trường hợp này, tất cả các bảng chữ cái sẽ được chuyển đổi thành chữ thường.


0
2017-07-16 12:12





Nếu toàn bộ văn bản là chữ hoa như "KILOMETER" và bạn chỉ muốn ký tự đầu tiên được hạ thấp, thì hãy làm

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

Nhưng để viết thường toàn bộ chuỗi, hãy làm

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

-1
2018-02-28 22:49



result = text.title () - Corey Goldberg
bạn chỉ muốn nhân vật đầu tiên được hạ thấp - OP đã nói khi nào? - Munim Munna