Python大文字・小文字変換|文字列操作の基本メソッド
Pythonで文字列の大文字・小文字変換を行う方法を初心者向けに解説。upper、lower、capitalize、title、swapcaseメソッドの使い方と実践的な活用例を紹介
Python大文字・小文字変換|文字列操作の基本メソッド
みなさん、Pythonで文字列の大文字・小文字を変換したことはありますか?
「ユーザーの入力を統一したい」「ファイル名を整理したい」「検索機能で大文字・小文字を区別したくない」 こんな場面で困ったことはないでしょうか?
実は、Pythonには文字列の大文字・小文字を簡単に変換する便利なメソッドがたくさん用意されています。 この記事を読めば、文字列操作のスキルを身につけて、より柔軟なデータ処理ができるようになります。
今回は、upper()
、lower()
、capitalize()
などの基本メソッドから実践的な活用例まで詳しく解説します。
一緒に文字列の大文字・小文字変換をマスターしていきましょう!
文字列の大文字・小文字変換って何?
文字列の大文字・小文字変換について、基本的な概念から学びましょう。
なぜ大文字・小文字変換が重要なの?
大文字・小文字変換が必要な場面はたくさんあります。
- ユーザー入力の正規化
- ファイル名やデータの統一
- 検索機能での大文字・小文字を区別しない比較
- 表示用の文字列フォーマット
適切な変換により、データの一貫性と使いやすさが向上します。
基本的な変換例
まずは簡単な例から見てみましょう。
# 基本的な変換の例original_text = "Hello World"
print(f"元の文字列: {original_text}")print(f"大文字: {original_text.upper()}") # HELLO WORLDprint(f"小文字: {original_text.lower()}") # hello worldprint(f"先頭大文字: {original_text.capitalize()}") # Hello worldprint(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()
:大文字と小文字を入れ替え
実践的な活用場面
- ユーザー入力の正規化
- ファイル名の統一
- 検索機能の実装
- データの比較・ソート
文字列の大文字・小文字変換は、データの正規化やユーザビリティの向上など、様々な場面で重要な役割を果たします。 適切なメソッドを選択することで、使いやすく一貫性のあるプログラムを作成できます。
まずは基本的なメソッドから始めて、徐々に複雑なデータ処理や検索機能にもチャレンジしてみてください! 今回学んだ内容を活用して、効果的な文字列処理を実装してみてくださいね。