この記事では、Pythonにおける文字列操作の基本メソッドを、体系的に解説していく。
Python文字列型の基本概念
Pythonの文字列型(str)は、テキストデータを扱うための基本的なデータ型だ。文字列はイミュータブル(変更不可能)な性質を持ち、一度作成されると内容を直接変更することはできない。
文字列の作成方法
Pythonでは複数の方法で文字列を作成できるが、'(シングルクォート)あるいは"(ダブルクォート)で囲うのが基本だ。
# 基本的な文字列作成
s1 = 'シングルクォート'
s2 = "ダブルクォート"
s3 = '''複数行の
テキストも
扱えます'''
s4 = """これも
複数行の
テキスト"""
# 文字列の中に引用符を含む場合
message1 = "彼は'こんにちは'と言った"
message2 = 'She said "Hello" to me'
文字列のインデックスアクセス
文字列は順序があるため、角括弧[]でインデックスを指定してアクセスできる。
s = "Python"
print(s[0]) # 'P' - 最初の文字
print(s[-1]) # 'n' - 最後の文字
print(s[2]) # 't' - 3番目の文字
print(len(s)) # 6 - 文字列の長さ
# 注意:文字列は変更不可能なので、以下のように直接指定するとエラーになる。
# s[0] = 'p' # これはエラーになる
文字列検索と確認メソッド
文字列の中から特定の部分を見つけたり、文字列の性質を確認したりするメソッドを紹介する。これらのメソッドは、テキスト処理やバリデーション処理で頻繁に使用される。
検索メソッド
- find(substring): 部分文字列の最初の位置を返す(見つからない場合は-1)
- index(substring): 部分文字列の最初の位置を返す(見つからない場合は例外発生)
- count(substring): 指定した文字列の出現回数をカウント
- startswith(prefix): 指定した文字列で始まるかどうかを判定
- endswith(suffix): 指定した文字列で終わるかどうかを判定
s = "Python programming"
# 部分文字列の位置を検索
print(s.find("pro")) # 7 - 見つかった位置のインデックス
print(s.find("java")) # -1 - 見つからない場合
print(s.index("pro")) # 7 - findと同様だが見つからない場合は例外
print(s.count("p")) # 1 - 出現回数をカウント
# 開始・終了の確認
print(s.startswith("Py")) # True - 指定文字列で始まるか
print(s.endswith("ing")) # True - 指定文字列で終わるか
文字種類の確認メソッド
- isdigit(): すべての文字が数字かどうかを判定
- isalpha(): すべての文字がアルファベットかどうかを判定
- isalnum(): すべての文字がアルファベットまたは数字かどうかを判定
- isupper(): すべての文字が大文字かどうかを判定
- islower(): すべての文字が小文字かどうかを判定
- isspace(): すべての文字が空白文字かどうかを判定
# 文字の種類を確認
print("123".isdigit()) # True - すべて数字か
print("abc".isalpha()) # True - すべてアルファベットか
print("abc123".isalnum()) # True - アルファベットと数字のみか
print("UPPER".isupper()) # True - すべて大文字か
print("lower".islower()) # True - すべて小文字か
print(" ".isspace()) # True - すべて空白文字か
# 実用的な使用例
user_input = input("数字を入力してください: ")
if user_input.isdigit():
number = int(user_input)
print(f"入力された数字は{number}です")
else:
print("数字以外が入力されました")

【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。Pythonの基礎から生成AI活用までを20時間ほどで一気に学びます。業務で活かせるPythonの基礎知識はしっかりと身につきます。
料金: 約1300-1500円
文字列変換メソッド
文字列を加工・変換するための以下のようなメソッドも用意されている。
大文字・小文字変換
- upper(): すべての文字を大文字に変換
- lower(): すべての文字を小文字に変換
- capitalize(): 最初の文字のみ大文字に、残りを小文字に変換
- title(): 各単語の先頭文字を大文字に変換
- swapcase(): 大文字と小文字を入れ替える
s = "Python Programming"
# 大文字・小文字変換
print(s.upper()) # "PYTHON PROGRAMMING" - すべて大文字
print(s.lower()) # "python programming" - すべて小文字
print(s.capitalize()) # "Python programming" - 最初の文字のみ大文字
print(s.title()) # "Python Programming" - 各単語の先頭を大文字
print(s.swapcase()) # "pYTHON pROGRAMMING" - 大文字と小文字を入れ替え
# 実用例:ユーザー名の正規化
username = input("ユーザー名を入力してください: ").strip().lower()
print(f"正規化されたユーザー名: {username}")
文字列の置換
- replace(old, new, count=None): 指定文字列を別の文字列に置換(countで置換回数を制限可能)
s = "Python programming is fun"
# 文字列の置換
print(s.replace("Python", "Java")) # "Java programming is fun"
print(s.replace("programming", "coding")) # "Python coding is fun"
print(s.replace(" ", "_")) # "Python_programming_is_fun"
# 置換回数を指定
text = "apple apple apple"
print(text.replace("apple", "orange", 2)) # "orange orange apple"
# 実用例:テンプレート文字列の処理
template = "こんにちは、{name}さん。今日は{date}ですね。"
message = template.replace("{name}", "田中").replace("{date}", "2024年1月15日")
print(message) # こんにちは、田中さん。今日は2024年1月15日ですね。
空白文字の処理
文字の空白を削除するのはよく用いられる。
- strip(chars=None): 文字列の両端から指定文字(デフォルトは空白文字)を削除
- lstrip(chars=None): 文字列の左端から指定文字を削除
- rstrip(chars=None): 文字列の右端から指定文字を削除
# 空白の削除
text = " Hello World "
print(f"'{text.strip()}'") # 'Hello World' - 両端の空白を削除
print(f"'{text.lstrip()}'") # 'Hello World ' - 左端の空白を削除
print(f"'{text.rstrip()}'") # ' Hello World' - 右端の空白を削除
# 特定の文字を削除
filename = "example.txt.backup"
print(filename.rstrip(".backup")) # "example.txt"
# 実用例:CSVデータの前処理
csv_data = " apple , banana , orange "
items = [item.strip() for item in csv_data.split(",")]
print(items) # ['apple', 'banana', 'orange']
文字列の分割と結合
文字列を分割して配列にしたり、逆に配列を結合して文字列にしたりする操作は、データ処理の基本的なテクニックだ。
文字列の分割
文字列を分割して、別の記事で解説しているリスト型に変換する。
- split(sep=None, maxsplit=-1): 指定区切り文字で文字列を分割してリストを作成
- splitlines(keepends=False): 改行文字で文字列を分割
s = "Python programming language"
# 空白で分割
words = s.split()
print(words) # ['Python', 'programming', 'language']
# 指定文字で分割
email = "user@example.com"
parts = email.split("@")
print(parts) # ['user', 'example.com']
# 分割数を制限
text = "apple,banana,orange,grape"
result = text.split(",", 2) # 最大2回分割
print(result) # ['apple', 'banana', 'orange,grape']
# 行単位での分割
multiline = """第1行
第2行
第3行"""
lines = multiline.splitlines()
print(lines) # ['第1行', '第2行', '第3行']
文字列の結合
リスト型のオブジェクトを文字列型に変換することもできる。
- join(iterable): リストなどのイテラブルを指定区切り文字で結合して文字列を作成
# リストを文字列に結合
fruits = ["apple", "banana", "orange"]
result = "-".join(fruits)
print(result) # "apple-banana-orange"
# 空文字で結合
chars = ["P", "y", "t", "h", "o", "n"]
word = "".join(chars)
print(word) # "Python"
# 実用例:パスの結合
path_parts = ["home", "user", "documents", "file.txt"]
file_path = "/".join(path_parts)
print(f"/{file_path}") # /home/user/documents/file.txt
# CSVデータの生成
data = ["田中太郎", "30", "東京都"]
csv_line = ",".join(data)
print(csv_line) # "田中太郎,30,東京都"
文字列スライシングの活用
文字列スライシングは、文字列の特定の部分を抽出する強力な機能だ。基本構文は文字列[開始位置:終了位置:ステップ]で、様々な応用が可能だ。
text = 'abcdefghij'
# 基本的な切り出し
print(text[1:5]) # 'bcde' - インデックス1から4まで
print(text[:3]) # 'abc' - 最初から3文字
print(text[3:]) # 'defghij' - 4文字目から最後まで
print(text[:]) # 'abcdefghij' - 全体をコピー
# ステップを使った例
print(text[::2]) # 'acegi' - 2文字おきに取得
print(text[1::3]) # 'beh' - インデックス1から3文字おき
print(text[::-1]) # 'jihgfedcba' - 逆順
# 実用例:文字列の部分抽出
phone = "090-1234-5678"
area_code = phone[:3] # "090"
middle = phone[4:8] # "1234"
last = phone[9:] # "5678"
print(f"エリアコード: {area_code}, 中間: {middle}, 末尾: {last}")
# ファイル名と拡張子の分離
filename = "document.pdf"
name = filename[:-4] # "document"
extension = filename[-4:] # ".pdf"
print(f"ファイル名: {name}, 拡張子: {extension}")

【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。Pythonの基礎から生成AI活用までを20時間ほどで一気に学びます。業務で活かせるPythonの基礎知識はしっかりと身につきます。
料金: 約1300-1500円