python - 확인 - 파이썬 문자열 함수




어떻게 파이썬에서 문자열 소문자로? (4)

파이썬에서 문자열을 소문자로 변환하는 방법?

전체 사용자 입력 문자열을 대문자로 변환하거나 심지어 대문자로 소문자로 변환 할 수있는 방법이 있습니까?

예 : 킬로미터 -> 킬로미터

이 작업을 수행하는 표준 파이썬 적 방법은 다음과 같습니다.

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

그러나 목적이 대소 문자를 구분하지 않고 일치하는 것 인 경우 대소 문자를 구분해야합니다.

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

이유는 다음과 같습니다.

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

이것은 Python 3의 str 메소드이지만 Python 2에서는 PyICU 또는 py2casefold를 보길 원할 것이다.

유니 코드 파이썬 3

파이썬 3 은 유니 코드를 일반 문자열로 처리합니다.

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

유니 코드 파이썬 2

그러나 파이썬 2는 아래에 쉘에 붙여 넣지 않고 utf-8 사용하여 리터럴을 바이트 문자열로 인코딩합니다.

그리고 lower 는 원시 유니 코드 객체가 인식 할 수있는 변경 사항을 매핑하지 않으므로 동일한 문자열을 얻습니다.

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

스크립트에서, 파이썬은 의도하지 않은 코딩이 모호하기 때문에 비 ASCII (파이썬 2.5에서와 파이썬 2.4에서의 경고) 바이트가 주어진 인코딩없이 문자열에 있다고 반대합니다. 더 자세한 내용은 docsPEP 263 의 유니 코드 사용 방법을 참조하십시오.

str 리터럴이 아닌 유니 코드 리터럴 사용

따라서 우리는 유니 코드 리터럴로 쉽게이 변환을 처리 할 unicode 문자열이 필요합니다.

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

바이트가 str 바이트와 ​​완전히 다르다는 점에 유의하십시오. 이스케이프 문자는 '\u' 다음에 2 바이트 너비 또는 이러한 unicode 문자의 16 비트 표현 unicode .

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

이제는 str 형태로만 unicode 로 변환해야합니다. 파이썬의 유니 코드 유형은 대부분의 다른 인코딩과 비교할 때 많은 advantages 을 갖는 보편적 인 인코딩 형식입니다. strunicode 로 변환하기 위해 코덱과 함께 unicode 생성자 또는 str.decode 메서드를 사용할 수 있습니다.

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

두 방법 모두 유니 코드 형식으로 변환되며 유니 코드 형식과 동일합니다.

모범 사례, 유니 코드 사용

유니 코드로 텍스트 를 항상 작업하는 것이 좋습니다.

소프트웨어는 유니 코드 문자열을 내부적으로 만 사용해야 출력시 특정 인코딩으로 변환해야합니다.

필요한 경우 다시 인코딩 할 수 있습니다.

그러나 소문자를 str 형식으로 되돌리려면 python 문자열을 utf-8 다시 인코딩하십시오.

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

따라서 파이썬 2에서 유니 코드는 파이썬 문자열로 인코딩 할 수 있고 파이썬 문자열은 유니 코드 유형으로 디코딩 할 수 있습니다.

대문자 또는 심지어 대문자에서 소문자로 문자열을 변환하는 방법이 있습니까?

예 : 킬로미터 -> 킬로미터.


Python 2에서는 UTF-8의 영어가 아닌 단어에 대해서는 작동하지 않습니다. 이 경우 decode('utf-8') 를 사용하면 다음을 수행 할 수 있습니다.

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

이 것을 시도하지 마십시오. 완전히 권장하지 마십시오. 이렇게하지 마십시오.

import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))

산출:

abcd

아무도 아직 쓴 적이 없으므로 swapcase 를 사용할 수 있습니다 (대문자는 소문자로 swapcase 그 반대도 마찬가지입니다) (그리고 방금 언급 한 경우 (위 아래로, 아래에서 위로 변환) 사용해야합니다)

s='ABCD'
print(s.swapcase())

산출:

abcd

베드로가 말한 것을 할 수 있습니다. 또는 사용자가 다음 코드를 수행 할 수있는 내용을 입력하게하려면 :

raw_input('Type Something').lower()

그런 다음 입력 한 문자열을 자동으로 소문자로 변환합니다.

참고 : raw_input 이름이 Python 3.x 이상으로 변경되었습니다.







lowercase