Python大文字・小文字を操作する文字列メソッド一覧:完全ガイド

 

基本的な大文字・小文字変換メソッド

lower()とupper()

text = "Hello, World!"

# 小文字に変換
lowercase = text.lower()
print(lowercase)  # hello, world!

# 大文字に変換
uppercase = text.upper()
print(uppercase)  # HELLO, WORLD!

# 元の文字列は変更されない
print(text)  # Hello, World!

capitalize()

text = "hello, world!"
capitalized = text.capitalize()
print(capitalized)  # Hello, world!

# 最初の文字のみ大文字、残りは小文字
text2 = "HELLO, WORLD!"
capitalized2 = text2.capitalize()
print(capitalized2)  # Hello, world!

title()

text = "hello, world! python programming"
titled = text.title()
print(titled)  # Hello, World! Python Programming

# アポストロフィ後も大文字になることに注意
text2 = "it's a beautiful day"
titled2 = text2.title()
print(titled2)  # It'S A Beautiful Day

高度な大文字・小文字変換

swapcase()

text = "Hello, World!"
swapped = text.swapcase()
print(swapped)  # hELLO, wORLD!

# 大文字と小文字が入れ替わる
mixed = "PyThOn PrOgRaMmInG"
swapped_mixed = mixed.swapcase()
print(swapped_mixed)  # pYtHoN pRoGrAmMiNg

casefold()

text1 = "Hello"
text2 = "HELLO"
text3 = "Straße"  # ドイツ語のエスツェット

# より厳密な小文字変換(国際化対応)
print(text1.casefold())  # hello
print(text2.casefold())  # hello
print(text3.casefold())  # strasse

# lower()との比較
print(text3.lower())     # straße
print(text3.casefold())  # strasse

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

islower()とisupper()

text1 = "hello"
text2 = "HELLO"
text3 = "Hello"
text4 = "123"

print(text1.islower())  # True
print(text2.islower())  # False
print(text3.islower())  # False
print(text4.islower())  # False(文字が含まれていない)

print(text1.isupper())  # False
print(text2.isupper())  # True
print(text3.isupper())  # False
print(text4.isupper())  # False

istitle()

text1 = "Hello World"
text2 = "Hello world"
text3 = "HELLO WORLD"
text4 = "Hello, World!"

print(text1.istitle())  # True
print(text2.istitle())  # False
print(text3.istitle())  # False
print(text4.istitle())  # True

実用的な活用例

名前の正規化

def normalize_name(name):
    """人名を適切な形式に正規化"""
    if not name:
        return ""
    
    # 前後の空白を削除し、単語間の余分な空白を整理
    name = " ".join(name.split())
    
    # 各単語の最初を大文字、残りを小文字
    return " ".join(word.capitalize() for word in name.split())

names = ["  john DOE  ", "mary-jane smith", "VAN GOGH"]
for name in names:
    print(f"'{name}' → '{normalize_name(name)}'")

メールアドレスの正規化

def normalize_email(email):
    """メールアドレスを正規化"""
    if not email:
        return ""
    
    email = email.strip()
    
    # @より前は大文字小文字を区別する場合があるので保持
    # @より後(ドメイン部分)は小文字に統一
    if "@" in email:
        local, domain = email.rsplit("@", 1)
        return f"{local}@{domain.lower()}"
    
    return email.lower()

emails = ["User@EXAMPLE.COM", "Test.User@Gmail.COM", "admin@SITE.ORG"]
for email in emails:
    print(f"{email} → {normalize_email(email)}")

URLの正規化

def normalize_url(url):
    """URLを正規化(プロトコルとドメインを小文字に)"""
    import re
    
    # プロトコル部分を小文字に
    url = re.sub(r'^(https?://)([^/]+)', 
                 lambda m: m.group(1).lower() + m.group(2).lower(), url)
    return url

urls = ["HTTP://EXAMPLE.COM/Path", "HTTPS://WWW.SITE.ORG/page.html"]
for url in urls:
    print(f"{url} → {normalize_url(url)}")

パスワード強度チェック

def check_password_case_requirements(password):
    """パスワードの大文字・小文字要件をチェック"""
    requirements = {
        'has_lower': any(c.islower() for c in password),
        'has_upper': any(c.isupper() for c in password),
        'has_digit': any(c.isdigit() for c in password),
        'has_alpha': any(c.isalpha() for c in password)
    }
    
    score = sum(requirements.values())
    
    return {
        'requirements': requirements,
        'score': score,
        'strength': 'Weak' if score < 3 else 'Strong'
    }

passwords = ["password", "Password", "Password123", "PASS123"]
for pwd in passwords:
    result = check_password_case_requirements(pwd)
    print(f"'{pwd}': {result['strength']} (Score: {result['score']})")

国際化対応の大文字・小文字処理

ロケール対応の変換

import locale

def locale_aware_case_conversion(text, operation='lower'):
    """ロケールを考慮した大文字小文字変換"""
    try:
        # 現在のロケールを取得
        current_locale = locale.getlocale()
        
        if operation == 'lower':
            return text.lower()
        elif operation == 'upper':
            return text.upper()
        elif operation == 'title':
            return text.title()
        elif operation == 'casefold':
            return text.casefold()
    except Exception as e:
        print(f"ロケール処理エラー: {e}")
        return text

# 各言語の文字列でテスト
international_texts = {
    "English": "Hello World",
    "German": "Straße Müller",
    "Turkish": "İstanbul",
    "Japanese": "こんにちは World"
}

for lang, text in international_texts.items():
    print(f"{lang}: {text}")
    print(f"  Lower: {text.lower()}")
    print(f"  Casefold: {text.casefold()}")
    print()

Unicode正規化との組み合わせ

import unicodedata

def normalize_unicode_case(text):
    """Unicode正規化と大文字小文字変換を組み合わせ"""
    # Unicode正規化(NFD: 分解)
    normalized = unicodedata.normalize('NFD', text)
    
    # アクセント文字を除去
    without_accents = ''.join(
        char for char in normalized 
        if unicodedata.category(char) != 'Mn'
    )
    
    # 小文字に変換
    return without_accents.lower()

accented_texts = ["café", "naïve", "résumé", "coöperate"]
for text in accented_texts:
    normalized = normalize_unicode_case(text)
    print(f"{text} → {normalized}")

カスタム変換関数

単語単位での変換

def smart_title_case(text):
    """前置詞や冠詞を除いて適切なタイトルケースに変換"""
    # 小文字のままにする単語リスト
    lowercase_words = {'a', 'an', 'and', 'as', 'at', 'but', 'by', 'for', 
                      'if', 'in', 'is', 'it', 'of', 'on', 'or', 'the', 'to'}
    
    words = text.lower().split()
    if not words:
        return text
    
    # 最初の単語は必ず大文字
    result = [words[0].capitalize()]
    
    # 2番目以降の単語
    for word in words[1:]:
        if word in lowercase_words:
            result.append(word)
        else:
            result.append(word.capitalize())
    
    return ' '.join(result)

titles = [
    "the lord of the rings",
    "a tale of two cities",
    "to kill a mockingbird"
]

for title in titles:
    print(f"'{title}' → '{smart_title_case(title)}'")

CamelCase変換

def to_camel_case(text, pascal_case=False):
    """文字列をCamelCaseまたはPascalCaseに変換"""
    import re
    
    # アンダースコアやハイフンで分割
    words = re.split(r'[-_\s]+', text.lower())
    
    if pascal_case:
        # PascalCase(最初も大文字)
        return ''.join(word.capitalize() for word in words if word)
    else:
        # camelCase(最初は小文字)
        if not words or not words[0]:
            return ''
        return words[0] + ''.join(word.capitalize() for word in words[1:] if word)

def to_snake_case(text):
    """CamelCaseをsnake_caseに変換"""
    import re
    
    # 大文字の前にアンダースコアを挿入
    s1 = re.sub('([a-z0-9])([A-Z])', r'\1_\2', text)
    return s1.lower()

test_strings = ["hello_world", "hello-world", "Hello World", "helloWorld"]
for text in test_strings:
    print(f"'{text}':")
    print(f"  camelCase: {to_camel_case(text)}")
    print(f"  PascalCase: {to_camel_case(text, pascal_case=True)}")
    print(f"  snake_case: {to_snake_case(text)}")
    print()

パフォーマンス比較

import time

def benchmark_case_methods():
    """大文字小文字変換メソッドのパフォーマンス比較"""
    text = "Hello World! This is a Test String." * 1000
    iterations = 10000
    
    methods = {
        'lower()': lambda s: s.lower(),
        'upper()': lambda s: s.upper(),
        'title()': lambda s: s.title(),
        'capitalize()': lambda s: s.capitalize(),
        'swapcase()': lambda s: s.swapcase(),
        'casefold()': lambda s: s.casefold()
    }
    
    for method_name, method_func in methods.items():
        start = time.time()
        for _ in range(iterations):
            result = method_func(text)
        end = time.time()
        print(f"{method_name}: {end - start:.6f}秒")

benchmark_case_methods()

エラーハンドリング

def safe_case_conversion(text, method='lower'):
    """安全な大文字小文字変換"""
    if text is None:
        return None
    
    if not isinstance(text, str):
        text = str(text)
    
    try:
        if method == 'lower':
            return text.lower()
        elif method == 'upper':
            return text.upper()
        elif method == 'title':
            return text.title()
        elif method == 'capitalize':
            return text.capitalize()
        elif method == 'swapcase':
            return text.swapcase()
        elif method == 'casefold':
            return text.casefold()
        else:
            return text
    except Exception as e:
        print(f"変換エラー: {e}")
        return text

# テスト
test_values = [None, 123, "Hello World", "", "テスト"]
for value in test_values:
    result = safe_case_conversion(value, 'title')
    print(f"{value} → {result}")

まとめ

Python の文字列大文字・小文字操作メソッドは豊富で用途に応じて使い分けることが重要です:

  • 基本変換: lower(), upper(), capitalize(), title()
  • 特殊変換: swapcase(), casefold()(国際化対応)
  • 判定: islower(), isupper(), istitle()
  • 国際化: casefold()とUnicode正規化の組み合わせ
  • カスタム変換: 用途特化の変換関数

これらを適切に使い分けることで、国際化対応したアプリケーションでも正確な文字列処理が可能になります。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座