閉じる

Pythonの大文字小文字変換(upper, lower, capitalize, title)の使い方

実務でも学習でも、文字列の大文字小文字を整える場面は頻繁にあります。

本記事では、Pythonのupperlowercapitalizetitleの4つに絞り、基本から使い分け、注意点まで丁寧に解説します。

見出しの整形や比較の前処理など、よくある用途もあわせて紹介します。

Pythonの大文字小文字変換の基本

大文字小文字変換とは

英字の文字列に対して大文字と小文字を変換することを指します。

Pythonではstr型がメソッドとしてupper()lower()capitalize()title()を提供しており、それぞれが異なる粒度で文字の大文字小文字を切り替えます。

なお、英字以外の記号や数字は基本的に変化しません。

文字列はイミュータブル

Pythonの文字列はイミュータブル(変更不可)です

そのため、upper()などを呼び出しても元の文字列は変わらず、新しい文字列が返されます。

変換結果を使いたい場合は再代入が必要です。

Python
# 元の文字列は変わらない例
s = "Hello"
t = s.upper()  # 新しい文字列 "HELLO" が返る
print(s)       # そのまま
print(t)       # 変換後
実行結果
Hello
HELLO

主な用途(比較・表示・正規化)

用途は大きく3つに分けられます。

1つ目は比較前の正規化で、ユーザー入力と定義済みキーワードを大小区別しないで比較したいときにlower()を使います。

2つ目は表示整形で、見出しや文章の先頭だけを整えるときにtitle()capitalize()が役立ちます。

3つ目はIDやコードの統一で、製品コードや16進文字列をupper()して統一感を出すと読み間違いを防げます。

upper/lower/capitalize/titleの使い方

以下は4つのメソッドの概要です。

メソッド変換の粒度主な対象想定用途
upper()全部を大文字英字“Hello” → “HELLO”IDやコードの統一、強調表示
lower()全部を小文字英字“Hello” → “hello”比較前の正規化、検索
capitalize()先頭のみ大文字、他は小文字文字列全体“hELLO world” → “Hello world”文頭の整形
title()単語ごとに先頭を大文字、他は小文字空白などで区切られた単語“hello world” → “Hello World”見出しの整形

upperの使い方(全て大文字)

upper()は文字列内の英字をすべて大文字にします。

記号や数字は変化しません。

Python
# upper() の基本
s = "id: ab-12cd, section 3"
print(s.upper())
実行結果
ID: AB-12CD, SECTION 3
メモ

製品コードや16進文字列は、統一して大文字にしておくと視認性が上がり、混乱を減らせます。

lowerの使い方(全て小文字)

lower()は英字をすべて小文字にします。

検索や比較の前処理として多用します。

Python
# lower() の基本
keyword = "Python"
user = "pyTHon"
print(keyword.lower() == user.lower())  # 大文字小文字を無視した比較
実行結果
True

capitalizeの使い方(先頭のみ大文字)

capitalize()文字列全体の先頭だけを大文字にし、それ以外は小文字にします。

文頭の整形に向いています。

Python
# capitalize() の基本
s = "hELLO world. PYTHON!"
print(s.capitalize())
実行結果
Hello world. python!
注意

文中の固有名詞まで小文字になってしまうため、固有名詞を含む文章には不向きな場合があります。

titleの使い方(単語ごとに大文字)

title()単語ごとに先頭を大文字、残りを小文字にします。

見出しの整形に便利です。

Python
# title() の基本
s = "learn python in 10 minutes"
print(s.title())
実行結果
Learn Python In 10 Minutes
注意

英文のスタイルガイドに沿った厳密なタイトルケース(前置詞は小文字など)ではありません。

あくまで機械的な変換です。

違いと使い分け(upper/lower/capitalize/title)

  • upper()lower()全文字を一括で変換し、capitalize()title()位置や単語境界に応じて変換します。
  • 文頭だけ整えるならcapitalize()、見出しならtitle()、比較の前処理ならlower()、コード統一はupper()が基本です。
入力upperlowercapitalizetitle
“Hello world”“HELLO WORLD”“hello world”“Hello world”“Hello World”
“e-mail today”“E-MAIL TODAY”“e-mail today”“E-mail today”“E-Mail Today”
“hELLO PYTHON”“HELLO PYTHON”“hello python”“Hello python”“Hello Python”

実践パターン

比較前の正規化(lower)

ユーザー入力とキーワードを大小無視で比較する例です。

両方をlower()してから比較します。

Python
# ログインIDを大小無視で照合する例
valid_ids = {"admin", "guest", "alice"}
user_input = "AdMiN"

is_valid = user_input.lower() in {x.lower() for x in valid_ids}
print(is_valid)
実行結果
True

見出しの整形(title)と文頭(capitalize)

見出しはtitle()、本文の最初の文だけならcapitalize()が適しています。

Python
# 見出しと本文の整形
heading = "introduction to python programming"
first_sentence = "tHis is a Beginner-friendly guide."

print(heading.title())       # 見出し
print(first_sentence.capitalize())  # 文頭
実行結果
Introduction To Python Programming
This is a beginner-friendly guide.

IDやコードの統一(upper)

製品コードや16進ダンプなどは大文字で統一すると読みやすくなります。

Python
# コードの正規化
codes = ["ab12", "Ab13", "aF00", "zz9"]
normalized = [c.upper() for c in codes]
print(normalized)
実行結果
['AB12', 'AB13', 'AF00', 'ZZ9']

チェーンのコツ(lower→capitalize)

「文頭のみ大文字、その他はすべて小文字」にしたい場合、lower()で一度正規化してからcapitalize()を適用すると安定します。

Python
# lower → capitalize のチェーン
s = "hELLO PYTHON, wELcOMe!"
result = s.lower().capitalize()
print(result)
実行結果
Hello python, welcome!

記号・数字は変化しない

記号や数字は原則として変化しません。

英字だけが対象です。

Python
# 記号・数字はそのまま
s = "ver-2.0 build#45 @2025/09"
print(s.upper())
print(s.lower())
実行結果
VER-2.0 BUILD#45 @2025/09
ver-2.0 build#45 @2025/09

注意点

Unicodeの大小変換はロケール非依存

Pythonの大小変換はロケール(地域設定)に依存しません

たとえばトルコ語の<i>i</i>/<i>I</i>の特殊事情は考慮されません。

そのため期待と異なる結果になることがあります。

Python
# トルコ語の i/I の例
print("istanbul".upper())   # 期待: İSTANBUL (トルコ語) だが…
print("İ".lower())          # I にドットが付く複合文字へ
print("I".lower())          # ドットなしの小文字にはならない
実行結果
ISTANBUL
i̇
i

補足として、大小無視の比較ではlower()よりもより強力な正規化手段であるcasefold()が適する場合があります。

ただし本記事の主題はupper/lower/capitalize/titleですので詳細は割愛します。

titleの単語境界(アポストロフィ/ハイフン)

title()はアポストロフィやハイフンで単語を区切るため、期待しない結果になることがあります。

Python
# title() の単語境界の挙動
print("don't stop".title())     # "Don'T Stop" になる
print("rock'n'roll".title())    # "Rock'N'Roll"
print("e-mail address".title()) # "E-Mail Address"
実行結果
Don'T Stop
Rock'N'Roll
E-Mail Address

アポストロフィを含む英文見出しを自然にしたい場合は、空白単位で分割してcapitalize()を適用する方法が有効です。

標準ライブラリのstring.capwords()も同様の動作をします。

Python
import string

s = "don't stop believing"
print(" ".join(w.capitalize() for w in s.split()))  # 手作り版
print(string.capwords(s))                           # 標準ライブラリ
実行結果
Don't Stop Believing
Don't Stop Believing

特殊文字の挙動(ß, İ など)

Unicode仕様により、1文字が複数文字に変換されることがあります。

ドイツ語の ß は大文字にすると “SS”となるのが代表例です。

Python
# 特殊文字の大小変換
print("straße".upper())   # ß → SS
print("ẞ".lower())        # 大文字のエスツェットは小文字に戻る
実行結果
STRASSE
ß

このように文字数が変化するため、インデックスやスライスの位置がずれる可能性に注意してください。

大量データ時のパフォーマンス

  • 同じ変換を何度も行う場合は、一度だけ変換して再利用します。
  • ループ内ではバインドしたメソッドを使うとわずかに速くなることがあります。
Python
# 大量の行を upper() にかける効率的な例
lines = ["line" + str(i) for i in range(100_000)]

# 悪い例: 毎回属性探索
res1 = [s.upper() for s in lines]

# よい例: メソッドをローカル変数にバインド
to_upper = str.upper
res2 = [to_upper(s) for s in lines]

print(len(res1), len(res2))
実行結果
100000 100000

また、生成した結果をすぐ出力するのでなければ、必要なときにだけ遅延実行(mapなど)する方法も検討してください。

再代入が必要(元の文字列は変わらない)

繰り返しになりますが、文字列はイミュータブルです。

元の変数に反映したい場合は再代入が必要です。

Python
s = "hello"
s.upper()       # 返り値を捨てると反映されない
print(s)        # 変化なし

s = s.upper()   # 再代入して反映
print(s)
実行結果
hello
HELLO

まとめ

大文字小文字変換は、比較前の正規化、見た目の整形、コード表記の統一など幅広い用途で使います。

文字列はイミュータブルで、upper/lower/capitalize/titleはそれぞれ変換の粒度が異なる点を押さえましょう。

特にUnicode特有の挙動(アポストロフィやß、トルコ語のIなど)とロケール非依存であることは重要です。

基本は、比較にはlower()、見出しにはtitle()、文頭にはcapitalize()、統一にはupper()という使い分けを覚えておくと、実務でも迷いません。

必要に応じて、分割とcapitalize()の組み合わせや、より厳密な比較ではcasefold()の活用も検討してください。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!