Python の文字列メソッド

完了

文字列メソッドは、Python で最も一般的なメソッドの種類の 1 つです。 文字列を操作して情報を抽出したり、特定の形式に合わせたりする必要がよくあります。 Python には、最も一般的で役に立つ変換を行うように設計された文字列メソッドがいくつか含まれています。

文字列メソッドは str 型の一部であり、メソッドは文字列変数として、または文字列の一部として直接存在します。 たとえば、メソッド .title() は、文字列の最初の文字を大文字で返し、文字列と併せて直接使用できます。

print("temperatures and facts about the moon".title())

出力: Temperatures And Facts About The Moon

動作と使用方法は変数でも同じです。

heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)

文字列を分割する

一般的な文字列メソッドは .split() です。 引数を指定しない場合、メソッドは文字列をスペースごとに区切ります。 この方法でメソッドを使用する場合は、スペースで区切られたすべての単語または数字のリストを作成します。

temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)

出力: ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']

この例では、複数の行を扱うので、(暗黙的な) 改行文字を使用して各行の末尾で文字列を分割し、1 行を作成できます。

temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)

出力: ['Daylight: 260 F', 'Nighttime: -280 F']

この種類の分割は、情報を処理または抽出するためにループが必要な場合や、テキスト ファイルからデータを読み込む場合に便利です。

文字列を検索する

一部の文字列メソッドでは、ループを使うことなく、処理前に内容を検索できます。 さまざまな惑星と月の温度について説明する 2 つの文があるとします。 ただし、関心があるのは、月に関連する温度だけです。 つまり、月についての文ではない場合は、情報を抽出するための処理を行わないようにする必要があります。

特定の単語、文字、または文字のグループが文字列内に存在するかどうかを検出する最も簡単な方法は、in 演算子を使うことです。

print("Moon" in "This text will describe facts and challenges with space travel")

出力: False

print("Moon" in "This text will describe facts about the Moon")

出力: True

文字列内で特定の単語の位置を検索するには、.find() メソッドを使用します。

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))

出力: -1

.find() メソッドからは、単語が見つからないときの -1、またはインデックス (文字列内の場所を表す数値) が返されます。 次の例は、Mars という単語を検索する場合の動作を示しています。

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))

出力: 64

64 は、文字列内で "Mars" が出現する位置です。

内容を検索するもう 1 つの方法は、.count() メソッドを使用するものです。このメソッドからは、文字列内での特定の単語の合計出現回数が返されます。

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.count("Mars"))
print(temperatures.count("Moon"))
1
0

Python の文字列では大文字と小文字が区別されるので、Moonmoon は異なる単語と見なされます。 大文字と小文字を区別しない比較を行うには、.lower() メソッドを使用して文字列をすべて小文字に変換します。

print("The Moon And The Earth".lower())

出力: the moon and the earth

.lower() メソッドと同様に、文字列にはその逆を行う .upper() メソッドがあり、すべての文字が大文字に変換されます。

print("The Moon And The Earth".upper())

出力: THE MOON AND THE EARTH

ヒント

内容を検索してチェックする場合の、より堅牢な方法は、大文字と小文字の使い分けによって一致が防げられることがないように、文字列を小文字に変換することです。 たとえば、the という単語の出現回数をカウントする場合、The も同じ単語ですが、メソッドではその出現は回数にカウントされません。 .lower() メソッドを使って、すべての文字を小文字に変更できます。

内容を調べる

テキストを処理して、表現が不規則な情報を抽出することがあります。 たとえば、次の文字列は、構造化されていない段落より処理が簡単です。

temperatures = "Mars Average Temperature: -60 C"

Mars の平均温度を抽出するには、次の方法で十分に行うことができます。

temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'

前のコードでは、コロン (:) の後にあるものはすべて温度であると信じています。 文字列は : で分割されて、2 つの項目のリストが生成されます。 リストで [-1] を使うと、最後の項目 (この例では温度) が返されます。

テキストが不規則な場合は、同じ分割方法を使用して値を取得することはできません。 項目をループ処理し、値が特定の種類であるかどうかを調べる必要があります。 Python には、文字列の種類を調べるのに役立つメソッドがあります。

mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
    if item.isnumeric():
        print(item)

出力: 30

.isnumeric() メソッドと同様に、.isdecimal() では 10 進数のような文字列をチェックできます。

重要

"-70".isnumeric() から False が返されることを知ると驚くかもしれません。 これは、文字列内のすべての文字が数字である必要があり、ダッシュ (-) は数字ではないためです。 文字列内の負の数値を調べる必要がある場合、.isnumeric() メソッドではうまくいきません。

値を調べるために文字列に適用できる追加の検証があります。 負の数値の場合、数字の前にダッシュが付加されていることを、.startswith() メソッドを使って検出できます。

print("-60".startswith('-'))

出力: True

同様に、.endswith() メソッドを使うと、文字列の最後の文字を検証するのに役立ちます。

if "30 C".endswith("C"):
    print("This temperature is in Celsius")

出力: This temperature is in Celsius

テキストの変換

テキストを別のものに変換する必要がある場合に役立つメソッドが他にもあります。 ここまで、CCelsius (摂氏) を、FFahrenheit (華氏) を表すことのできる文字列を見てきました。 .replace() メソッドを使用すると、文字または文字のグループの出現箇所を検索し、置換することができます。

print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))

出力: Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.

前述のように、.lower() はテキストを正規化して大文字と小文字を区別しない検索を行うのによい方法です。 テキストで温度が言及されているかどうかを簡単に調べてみましょう。

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)

出力: False

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())

出力: True

常に大文字と小文字を区別しない検証を行う必要はありませんが、テキストに大文字と小文字が混在するときは、すべての文字を小文字にするのがよい方法です。

テキストを分割して変換を実行した後、各部を再度結合することが必要になる場合があります。 .split() メソッドで文字を分割できるのと同様に、.join() メソッドではそれらをまとめて戻すことができます。

.join() メソッドでは引数として反復可能な値 (Python リストなど) が必要であるため、その使用方法は他の文字列メソッドとは異なります。

moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))

出力: The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.

この例では、' ' を使用してリスト内のすべての項目を結合しています。