Python大文字・小文字変換|文字列操作の基本メソッド

Pythonで文字列の大文字・小文字変換を行う方法を初心者向けに解説。upper、lower、capitalize、title、swapcaseメソッドの使い方と実践的な活用例を紹介

Learning Next 運営
35 分で読めます

Python大文字・小文字変換|文字列操作の基本メソッド

みなさん、Pythonで文字列の大文字・小文字を変換したことはありますか?

「ユーザーの入力を統一したい」「ファイル名を整理したい」「検索機能で大文字・小文字を区別したくない」 こんな場面で困ったことはないでしょうか?

実は、Pythonには文字列の大文字・小文字を簡単に変換する便利なメソッドがたくさん用意されています。 この記事を読めば、文字列操作のスキルを身につけて、より柔軟なデータ処理ができるようになります。

今回は、upper()lower()capitalize()などの基本メソッドから実践的な活用例まで詳しく解説します。 一緒に文字列の大文字・小文字変換をマスターしていきましょう!

文字列の大文字・小文字変換って何?

文字列の大文字・小文字変換について、基本的な概念から学びましょう。

なぜ大文字・小文字変換が重要なの?

大文字・小文字変換が必要な場面はたくさんあります。

  • ユーザー入力の正規化
  • ファイル名やデータの統一
  • 検索機能での大文字・小文字を区別しない比較
  • 表示用の文字列フォーマット

適切な変換により、データの一貫性と使いやすさが向上します。

基本的な変換例

まずは簡単な例から見てみましょう。

# 基本的な変換の例
original_text = "Hello World"
print(f"元の文字列: {original_text}")
print(f"大文字: {original_text.upper()}") # HELLO WORLD
print(f"小文字: {original_text.lower()}") # hello world
print(f"先頭大文字: {original_text.capitalize()}") # Hello world
print(f"タイトル形式: {original_text.title()}") # Hello World

実行結果はこちらです。

元の文字列: Hello World 大文字: HELLO WORLD 小文字: hello world 先頭大文字: Hello world タイトル形式: Hello World

各メソッドは元の文字列を変更せず、新しい文字列を返すんです。 これは覚えておきたいポイントですね。

基本的な変換メソッド

Pythonで提供される文字列の大文字・小文字変換メソッドを詳しく見てみましょう。

upper()メソッド - 全て大文字に変換

全ての文字を大文字にする最もシンプルな方法です。

# upper()メソッドの使用例
text = "hello world"
uppercase_text = text.upper()
print(uppercase_text) # HELLO WORLD
# 様々な文字列での例
examples = [
"python programming",
"Hello World",
"ALREADY UPPERCASE",
"123abc456def"
]
print("upper()メソッドの例:")
for example in examples:
print(f"'{example}' -> '{example.upper()}'")

実行結果はこちらです。

HELLO WORLD upper()メソッドの例: 'python programming' -> 'PYTHON PROGRAMMING' 'Hello World' -> 'HELLO WORLD' 'ALREADY UPPERCASE' -> 'ALREADY UPPERCASE' '123abc456def' -> '123ABC456DEF'

upper()メソッドは、文字列内のすべての英字を大文字に変換します。 数字や記号はそのまま残りますよ。

lower()メソッド - 全て小文字に変換

全ての文字を小文字にする便利な方法です。

# lower()メソッドの使用例
text = "HELLO WORLD"
lowercase_text = text.lower()
print(lowercase_text) # hello world
# 実用的な例:ユーザー入力の正規化
user_input = "YES"
normalized_input = user_input.lower()
if normalized_input in ["yes", "y", "ok"]:
print("承認されました")
else:
print("承認されませんでした")
# 複数の入力例
inputs = ["Yes", "YES", "yes", "Y", "y", "No", "NO"]
for inp in inputs:
result = "承認" if inp.lower() in ["yes", "y"] else "拒否"
print(f"'{inp}' -> {result}")

実行結果はこちらです。

hello world 承認されました 'Yes' -> 承認 'YES' -> 承認 'yes' -> 承認 'Y' -> 拒否 'y' -> 承認 'No' -> 拒否 'NO' -> 拒否

lower()メソッドは、ユーザー入力の正規化でよく使われます。 大文字・小文字を気にしない判定ができるんです。

capitalize()メソッド - 先頭のみ大文字に変換

文章の最初だけを大文字にしたい場合に使います。

# capitalize()メソッドの使用例
text = "hello world"
capitalized_text = text.capitalize()
print(capitalized_text) # Hello world
# 注意:最初の文字のみ大文字、他はすべて小文字
examples = [
"hello world",
"HELLO WORLD",
"hELLo WoRLd",
"python programming"
]
print("capitalize()メソッドの例:")
for example in examples:
print(f"'{example}' -> '{example.capitalize()}'")
# 文の先頭を大文字にする実用例
sentences = ["this is a sentence.", "another EXAMPLE here."]
for sentence in sentences:
formatted = sentence.capitalize()
print(f"整形前: {sentence}")
print(f"整形後: {formatted}")

実行結果はこちらです。

Hello world capitalize()メソッドの例: 'hello world' -> 'Hello world' 'HELLO WORLD' -> 'Hello world' 'hELLo WoRLd' -> 'Hello world' 'python programming' -> 'Python programming' 整形前: this is a sentence. 整形後: This is a sentence. 整形前: another EXAMPLE here. 整形後: Another example here.

capitalize()メソッドは、最初の文字のみを大文字にし、残りを小文字にします。 文章の先頭を整える時に便利ですね。

title()メソッド - タイトル形式に変換

各単語の先頭を大文字にする方法です。

# title()メソッドの使用例
text = "hello world python programming"
title_text = text.title()
print(title_text) # Hello World Python Programming
# 書籍タイトルや名前の整形に便利
book_titles = [
"the great gatsby",
"to kill a mockingbird",
"pride and prejudice"
]
print("書籍タイトルの整形:")
for title in book_titles:
formatted_title = title.title()
print(f"元: {title}")
print(f"整形後: {formatted_title}")
print("---")
# 人名の整形
names = ["john doe", "mary jane watson", "peter parker"]
for name in names:
formatted_name = name.title()
print(f"'{name}' -> '{formatted_name}'")

実行結果はこちらです。

Hello World Python Programming 書籍タイトルの整形: 元: the great gatsby 整形後: The Great Gatsby --- 元: to kill a mockingbird 整形後: To Kill A Mockingbird --- 元: pride and prejudice 整形後: Pride And Prejudice --- 'john doe' -> 'John Doe' 'mary jane watson' -> 'Mary Jane Watson' 'peter parker' -> 'Peter Parker'

title()メソッドは、各単語の最初の文字を大文字にします。 書籍タイトルや人名の整形に最適ですね。

swapcase()メソッド - 大文字と小文字を入れ替え

ちょっと変わったメソッドも見てみましょう。

# swapcase()メソッドの使用例
text = "Hello World"
swapped_text = text.swapcase()
print(swapped_text) # hELLO wORLD
# 様々な例
examples = [
"Hello World",
"PYTHON programming",
"MiXeD cAsE tExT",
"123aBc456DeF"
]
print("swapcase()メソッドの例:")
for example in examples:
swapped = example.swapcase()
print(f"'{example}' -> '{swapped}'")
# 2回適用すると元に戻る
original = "Hello World"
swapped_once = original.swapcase()
swapped_twice = swapped_once.swapcase()
print(f"元の文字列: {original}")
print(f"1回変換: {swapped_once}")
print(f"2回変換: {swapped_twice}")
print(f"元に戻った: {original == swapped_twice}") # True

実行結果はこちらです。

hELLO wORLD swapcase()メソッドの例: 'Hello World' -> 'hELLO wORLD' 'PYTHON programming' -> 'python PROGRAMMING' 'MiXeD cAsE tExT' -> 'mIxEd CaSe TeXt' '123aBc456DeF' -> '123AbC456dEf' '元の文字列: Hello World 1回変換: hELLO wORLD 2回変換: Hello World 元に戻った: True

swapcase()メソッドは、大文字を小文字に、小文字を大文字に変換します。 面白い特性として、2回適用すると元に戻るんです。

大文字・小文字判定メソッド

文字列の大文字・小文字を判定するメソッドも重要です。

判定メソッドの基本

文字列の状態を調べる便利なメソッドがあります。

# 判定メソッドの例
test_strings = [
"HELLO", # 全て大文字
"hello", # 全て小文字
"Hello", # 先頭大文字
"Hello World", # タイトル形式
"hELLo", # 混在
"123", # 数字のみ
"" # 空文字列
]
print("文字列の大文字・小文字判定:")
for text in test_strings:
print(f"'{text}':")
print(f" isupper(): {text.isupper()}") # 全て大文字か
print(f" islower(): {text.islower()}") # 全て小文字か
print(f" istitle(): {text.istitle()}") # タイトル形式か
print(f" isalpha(): {text.isalpha()}") # 全て英字か
print("---")

実行結果はこちらです。

文字列の大文字・小文字判定: 'HELLO': isupper(): True islower(): False istitle(): False isalpha(): True --- 'hello': isupper(): False islower(): True istitle(): False isalpha(): True --- 'Hello': isupper(): False islower(): False istitle(): True isalpha(): True ---

これらのメソッドは、文字列の状態を判定してブール値を返します。 条件分岐で使うのに便利ですね。

実用的な判定例

パスワードの強度チェックなどで活用できます。

def analyze_password_format(password):
"""パスワードの形式を分析する関数"""
print(f"パスワード: '{password}'")
has_upper = any(c.isupper() for c in password)
has_lower = any(c.islower() for c in password)
has_digit = any(c.isdigit() for c in password)
print(f" 大文字を含む: {has_upper}")
print(f" 小文字を含む: {has_lower}")
print(f" 数字を含む: {has_digit}")
strength = sum([has_upper, has_lower, has_digit])
if strength >= 3:
print(" 強度: 強い")
elif strength >= 2:
print(" 強度: 普通")
else:
print(" 強度: 弱い")
return strength
# パスワード分析の例
passwords = ["password", "Password", "PASSWORD", "Pass123", "p@ssW0rd"]
for pwd in passwords:
analyze_password_format(pwd)
print()

この長いコードは、パスワード強度チェックの全体像です。 一つずつ見ていきましょう。

まず、各文字種の判定部分です。

has_upper = any(c.isupper() for c in password)
has_lower = any(c.islower() for c in password)
has_digit = any(c.isdigit() for c in password)

any()関数と組み合わせて、大文字・小文字・数字が含まれているかを判定しています。

次に、強度の計算部分です。

strength = sum([has_upper, has_lower, has_digit])

ブール値を数値として合計することで、含まれる文字種の数を計算しています。

実践的な活用例

大文字・小文字変換を使った実際のプログラム例を見てみましょう。

ユーザー入力の正規化システム

ユーザーからの入力を統一する機能を作ってみます。

def normalize_user_input(user_input, format_type="lower"):
"""ユーザー入力を正規化する関数"""
# 前後の空白を削除
normalized = user_input.strip()
# 形式に応じて変換
if format_type == "lower":
normalized = normalized.lower()
elif format_type == "upper":
normalized = normalized.upper()
elif format_type == "title":
normalized = normalized.title()
elif format_type == "capitalize":
normalized = normalized.capitalize()
return normalized
# テスト用のデータ処理例
test_data = [
("john", "doe", "John.Doe@Example.COM"),
("MARY", "jane", "mary.jane@GMAIL.com"),
("peter", "PARKER", "Peter.Parker@Yahoo.COM")
]
print("ユーザーデータの正規化:")
for first, last, email in test_data:
first_normalized = normalize_user_input(first, "title")
last_normalized = normalize_user_input(last, "title")
email_normalized = normalize_user_input(email, "lower")
print(f"元データ: {first}, {last}, {email}")
print(f"正規化後: {first_normalized} {last_normalized}, {email_normalized}")
print("---")

実行結果はこちらです。

ユーザーデータの正規化: 元データ: john, doe, John.Doe@Example.COM 正規化後: John Doe, john.doe@example.com 元データ: MARY, jane, mary.jane@GMAIL.com 正規化後: Mary Jane, mary.jane@gmail.com 元データ: peter, PARKER, Peter.Parker@Yahoo.COM 正規化後: Peter Parker, peter.parker@yahoo.com

ユーザー入力の正規化により、データの一貫性を保てます。 名前は読みやすくタイトル形式、メールアドレスは小文字で統一ですね。

ファイル名の整理システム

ファイル名を統一する機能も作ってみましょう。

import os
def normalize_filename(filename, style="lower"):
"""ファイル名を正規化する関数"""
# ファイル名と拡張子を分離
name, extension = os.path.splitext(filename)
# スペースをアンダースコアに変換
name = name.replace(" ", "_")
# 不正文字を削除
invalid_chars = '<>:"/\\|?*'
for char in invalid_chars:
name = name.replace(char, "")
# 大文字・小文字の処理
if style == "lower":
name = name.lower()
elif style == "upper":
name = name.upper()
elif style == "title":
name = name.title().replace("_", "_")
# 拡張子は小文字に統一
extension = extension.lower()
return name + extension
def batch_rename_files(file_list, style="lower"):
"""ファイル名の一括変換"""
renamed_files = []
for filename in file_list:
normalized = normalize_filename(filename, style)
renamed_files.append((filename, normalized))
return renamed_files
# ファイル名変換の例
test_files = [
"My Document.txt",
"Photo Album.JPG",
"Project Report.PDF",
"Meeting Notes.docx",
"Data Analysis.XLSX"
]
print("ファイル名の正規化:")
for style in ["lower", "upper", "title"]:
print(f"
{style.upper()}形式:")
renamed = batch_rename_files(test_files, style)
for original, normalized in renamed:
print(f" {original} -> {normalized}")

実行結果はこちらです。

ファイル名の正規化: LOWER形式: My Document.txt -> my_document.txt Photo Album.JPG -> photo_album.jpg Project Report.PDF -> project_report.pdf Meeting Notes.docx -> meeting_notes.docx Data Analysis.XLSX -> data_analysis.xlsx UPPER形式: My Document.txt -> MY_DOCUMENT.txt Photo Album.JPG -> PHOTO_ALBUM.jpg Project Report.PDF -> PROJECT_REPORT.pdf Meeting Notes.docx -> MEETING_NOTES.docx Data Analysis.XLSX -> DATA_ANALYSIS.xlsx

ファイル名の正規化により、システム間での互換性が向上します。 スペースはアンダースコアに変換し、拡張子は小文字で統一ですね。

検索機能の実装

大文字・小文字を区別しない検索機能を作ってみましょう。

def case_insensitive_search(data, search_term):
"""大文字・小文字を区別しない検索"""
search_term_lower = search_term.lower()
results = []
for item in data:
if search_term_lower in item.lower():
results.append(item)
return results
def advanced_search(data, search_term, search_type="contains"):
"""高度な検索機能"""
search_term_lower = search_term.lower()
results = []
for item in data:
item_lower = item.lower()
if search_type == "contains":
if search_term_lower in item_lower:
results.append(item)
elif search_type == "starts_with":
if item_lower.startswith(search_term_lower):
results.append(item)
elif search_type == "ends_with":
if item_lower.endswith(search_term_lower):
results.append(item)
elif search_type == "exact":
if item_lower == search_term_lower:
results.append(item)
return results
# 検索システムのデモ
product_list = [
"Apple iPhone 13",
"Samsung Galaxy S21",
"Google Pixel 6",
"Apple MacBook Pro",
"Microsoft Surface Pro",
"Dell XPS 13",
"HP Pavilion",
"Lenovo ThinkPad"
]
print("商品検索システム:")
# 部分一致検索
search_results = case_insensitive_search(product_list, "apple")
print(f"'apple'の検索結果: {search_results}")
# 前方一致検索
search_results = advanced_search(product_list, "samsung", "starts_with")
print(f"'samsung'で始まる商品: {search_results}")
# 後方一致検索
search_results = advanced_search(product_list, "pro", "ends_with")
print(f"'pro'で終わる商品: {search_results}")
# 完全一致検索
search_results = advanced_search(product_list, "google pixel 6", "exact")
print(f"'google pixel 6'の完全一致: {search_results}")

実行結果はこちらです。

商品検索システム: 'apple'の検索結果: ['Apple iPhone 13', 'Apple MacBook Pro'] 'samsung'で始まる商品: ['Samsung Galaxy S21'] 'pro'で終わる商品: ['Apple MacBook Pro', 'Microsoft Surface Pro'] 'google pixel 6'の完全一致: ['Google Pixel 6']

大文字・小文字を区別しない検索により、ユーザビリティが大幅に向上します。 「apple」で検索しても「Apple」の商品が見つかるんです。

文字列比較と大文字・小文字

文字列比較での大文字・小文字の扱い方も重要です。

大文字・小文字を区別しない比較

ユーザーフレンドリーな比較機能を作ってみましょう。

def case_insensitive_compare(str1, str2):
"""大文字・小文字を区別しない文字列比較"""
return str1.lower() == str2.lower()
def validate_user_choice(user_input, valid_choices):
"""ユーザーの選択を検証する関数"""
user_input_lower = user_input.lower()
valid_choices_lower = [choice.lower() for choice in valid_choices]
return user_input_lower in valid_choices_lower
# 比較の例
test_pairs = [
("Hello", "hello"),
("PYTHON", "python"),
("Yes", "YES"),
("No", "maybe")
]
print("大文字・小文字を区別しない比較:")
for str1, str2 in test_pairs:
result = case_insensitive_compare(str1, str2)
print(f"'{str1}' == '{str2}': {result}")
# ユーザー選択の検証例
valid_options = ["Yes", "No", "Maybe", "Cancel"]
user_inputs = ["yes", "NO", "MAYBE", "ok", "cancel"]
print("
ユーザー選択の検証:")
for user_input in user_inputs:
is_valid = validate_user_choice(user_input, valid_options)
print(f"'{user_input}': {'有効' if is_valid else '無効'}")

実行結果はこちらです。

大文字・小文字を区別しない比較: 'Hello' == 'hello': True 'PYTHON' == 'python': True 'Yes' == 'YES': True 'No' == 'maybe': False ユーザー選択の検証: 'yes': 有効 'NO': 有効 'MAYBE': 有効 'ok': 無効 'cancel': 有効

大文字・小文字を区別しない比較により、ユーザーフレンドリーな処理が可能になります。

ソートと大文字・小文字

リストのソートでも大文字・小文字の扱いが重要です。

def case_insensitive_sort(string_list):
"""大文字・小文字を区別しないソート"""
return sorted(string_list, key=str.lower)
def custom_sort_with_case(string_list, case_sensitive=True):
"""カスタムソート関数"""
if case_sensitive:
return sorted(string_list)
else:
return sorted(string_list, key=str.lower)
# ソートの例
names = ["john", "Alice", "bob", "Carol", "david", "Eve"]
print("元のリスト:", names)
# 大文字・小文字を区別するソート
sorted_case_sensitive = custom_sort_with_case(names, case_sensitive=True)
print("大文字・小文字区別あり:", sorted_case_sensitive)
# 大文字・小文字を区別しないソート
sorted_case_insensitive = custom_sort_with_case(names, case_sensitive=False)
print("大文字・小文字区別なし:", sorted_case_insensitive)
# 複雑な例:会社名のソート
company_names = [
"apple Inc.",
"Microsoft Corporation",
"google LLC",
"Amazon.com Inc.",
"facebook Inc.",
"Tesla, Inc."
]
print("
会社名のソート:")
print("元のリスト:")
for name in company_names:
print(f" {name}")
print("大文字・小文字を区別しないソート:")
sorted_companies = case_insensitive_sort(company_names)
for name in sorted_companies:
print(f" {name}")

実行結果はこちらです。

元のリスト: ['john', 'Alice', 'bob', 'Carol', 'david', 'Eve'] 大文字・小文字区別あり: ['Alice', 'Carol', 'Eve', 'bob', 'david', 'john'] 大文字・小文字区別なし: ['Alice', 'bob', 'Carol', 'david', 'Eve', 'john'] 会社名のソート: 元のリスト: apple Inc. Microsoft Corporation google LLC Amazon.com Inc. facebook Inc. Tesla, Inc. 大文字・小文字を区別しないソート: Amazon.com Inc. apple Inc. facebook Inc. google LLC Microsoft Corporation Tesla, Inc.

ソート処理でも大文字・小文字の扱いを適切に設定することが重要です。 自然なアルファベット順になるように調整できますね。

まとめ

Pythonでの文字列の大文字・小文字変換について、基本メソッドから実践的な活用例まで解説しました。

基本的なメソッド

  • upper():全て大文字に変換
  • lower():全て小文字に変換
  • capitalize():先頭のみ大文字に変換
  • title():各単語の先頭を大文字に変換
  • swapcase():大文字と小文字を入れ替え

実践的な活用場面

  • ユーザー入力の正規化
  • ファイル名の統一
  • 検索機能の実装
  • データの比較・ソート

文字列の大文字・小文字変換は、データの正規化やユーザビリティの向上など、様々な場面で重要な役割を果たします。 適切なメソッドを選択することで、使いやすく一貫性のあるプログラムを作成できます。

まずは基本的なメソッドから始めて、徐々に複雑なデータ処理や検索機能にもチャレンジしてみてください! 今回学んだ内容を活用して、効果的な文字列処理を実装してみてくださいね。

関連記事