Python での各単語の最初の文字を大文字にする
- 
          
            string.title()メソッドを使った Python の各単語の最初の文字を大文字にする
- 
          
            string.capwords()メソッドを用いた Python の各単語の大文字化
- 
          
            string.split()とstring.join()メソッドを用いた Python での各単語の大文字化
 
このチュートリアルでは、Python で文字列の各単語の最初の文字を大文字にする様々な方法を説明します。例えば、hey! what's up? のような文字列があり、それを Hey! What's Up? に変換したいとします。これを行うには、利用可能なメソッドを使うか、文字列の各単語を分離し、各単語の最初の文字を大文字にしてから文字列を結合することで行うことができます。
hey...   what's up? のような文字列もあるかもしれませんが、文字列の元の間隔を維持したいと思います。このチュートリアルでは、これらの問題を解決するためのさまざまな方法について説明します。
string.title() メソッドを使った Python の各単語の最初の文字を大文字にする
string.title() は文字列を入力として受け取り、各単語の最初の文字を大文字にした文字列を返す組み込みのメソッドです。string.title() メソッドは文字列の元の間隔を変更しません。以下のコード例は、string.title() メソッドを用いて Python で単語の各文字を大文字にする方法を示しています。
string = "hey! what's up?"
print(string)
print(string.title())
出力:
Hey! What's up?
Hey! What'S Up?
上の例で気づいたように、string.title() メソッドは句読点の後の文字を大文字にしてしまうため、句読点との相性が良くありません。
string.capwords() メソッドを用いた Python の各単語の大文字化
string モジュールの string.capwords(string, sep) は、文字列を第 1 引数に、sep を第 2 引数に取り、各単語の最初の文字を大文字にした文字列を sep パラメータの基底で区切って返します。sep パラメータに値を渡さないか None に設定すると、空白が区切り文字として使われ、1つの空白が 1つ以上の空白に置き換わります。
以下のコード例は、string.capwords() メソッドを用いて文字列の各単語を大文字にする方法を示しています。
import string
mystring = "hey!   what's up?"
print(mystring)
print(string.capwords(mystring))
出力:
hey!   what's up?
Hey! What's Up?
このメソッドの問題点は、'hello' のような単語を見逃してしまうか、sep パラメータに 'を渡すと、以下の例のように what's から what'S までの単語を大文字にしてしまうことです。
import string
mystring = "'hello'   what's up?"
print(mystring)
print(string.capwords(mystring))
print(string.capwords(mystring, sep="'"))
出力:
'hello'   what's up?
'hello' What's Up?
'Hello'   what'S up?
string.split() と string.join() メソッドを用いた Python での各単語の大文字化
string.split(separator,..) メソッドは文字列をリストに変換します。string.join(iterable) メソッドは iterable オブジェクトを入力として受け取り、文字列の引数に単語の区切り文字を指定して文字列に変換します。
以下のサンプルコードは、string.split() メソッドと string.join() メソッドを使って Python で各単語の最初の文字を大文字にする方法を示しています。
import re
s = "'hello'   what's up?"
print(s)
slist = []
for word in s.split():
    if word[0] in ("'", '"', "("):
        word = word[0] + word[1].upper() + word[2:]
        slist.append(word)
    else:
        word = word[0].upper() + word[1:]
        slist.append(word)
    new_string = " ".join(slist)
print(new_string)
出力:
'hello'   what's up?
'Hello' What's Up?
上の例で気づいたように、このメソッドは引用符、所有名詞、括弧の間の単語を扱うことができます。しかし、このメソッドでは文字列の元の間隔が失われてしまいます。