文字列を大文字から、または一部大文字から小文字に変換する方法はありますか?
たとえば、「キロメーター」→「キロメーター」。
使用.lower()
-例:
s = "Kilometer"
print(s.lower())
公式の2.xドキュメントはここにあります:
公式の3.xドキュメントはここにあります:str.lower()
str.lower()
Pythonで文字列を小文字に変換する方法は?
ユーザーが入力した文字列全体を大文字から、または一部を大文字から小文字に変換する方法はありますか?
例:キロメートル->キロメートル
これを行うための標準的なPythonicの方法は
>>> '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
これはPython3のstrメソッドですが、Python 2では、PyICUまたはpy2casefoldを確認する必要があります。いくつかの回答がここでこれに対処しています。
Python 3は、プレーン文字列リテラルをUnicodeとして処理します。
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
Python 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()
Километр
スクリプトでは、意図されたコーディングがあいまいになるため、Pythonは非ASCII(Python 2.5以降、Python 2.4では警告)バイトがエンコードされていない文字列に含まれることに反対します。詳細については、ドキュメントのUnicodeハウツーとPEP263を参照してください。
str
するしたがってunicode
、この変換を処理するための文字列が必要です。これは、プレフィックスで明確にするユニコード文字列リテラルで簡単に実行できます(プレフィックスはPython 3でも機能するu
ことに注意してください)。u
>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр
バイトはバイトとは完全に異なることに注意してくださいstr
。エスケープ文字の後には2バイト幅、つまりこれらの文字'\u'
の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
ます。PythonのUnicodeタイプは、他のほとんどのエンコーディングと比較して多くの利点があるユニバーサルエンコーディングフォーマットです。unicode
コンストラクターまたはstr.decode
コーデックでメソッドを使用して、を次のように変換できstr
ます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
どちらの方法もユニコードタイプに変換されます-そしてunicode_literalと同じです。
常にUnicodeのテキストで作業することをお勧めします。
ソフトウェアは内部でUnicode文字列のみを処理し、出力時に特定のエンコーディングに変換する必要があります。
ただし、小文字をタイプに戻すには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')
километр
したがって、Python 2では、UnicodeはPython文字列にエンコードでき、Python文字列はUnicodeタイプにデコードできます。
Python 2では、これはUTF-8の英語以外の単語では機能しません。この場合、次のdecode('utf-8')
ことが役立ちます。
>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр
また、いくつかの変数を上書きできます。
s = input('UPPER CASE')
lower = s.lower()
このように使用する場合:
s = "Kilometer"
print(s.lower()) - kilometer
print(s) - Kilometer
呼び出されたときに機能します。
組み込みの文字列メソッドlower
を使用してそれを行うことができます
例えば:
>>> s = "Kilometres"
>>> s.lower()
'kilometres'
これを試さないでください、まったくお勧めしません、これをしないでください:
import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))
出力:
abcd
まだ誰も書いていませんswapcase
ので、使用できます(大文字は小文字になり、その逆も同様です)(これは、先ほど説明した場合に使用する必要があります(大文字から小文字、小文字から大文字に変換)):
s='ABCD'
print(s.swapcase())
出力:
abcd
それを行う最も簡単な方法は次のとおりです。
i = "Kilometers"
print(i.lower())
組み込みのlower()関数を使用するだけです。
すなわち:
mystring = 'Hello!'
lowercase = mystring.lower()
print(lowercase)
これは戻りmyself
ますが、小文字です。
文字列内のすべての文字が小文字であるかどうかを最初に確認する必要がある場合は、次を使用します。
string.islower()
すべての文字が小文字の場合はTrueを返し、それ以外の場合はFalseを返します。
使用できるのは次のとおりです。
s = "Kilometer"
if not s.islower():
s.lower()