Python入門 第12回:文字列操作

Python入門 第12回:文字列操作 Python

Contents

はじめに

Pythonでプログラムを作成するとき、文字列を扱う機会は非常に多くあります。

たとえば、次のような処理です。

  • ユーザーが入力した名前を表示する
  • CSV形式のデータを分割する
  • 不要な空白や改行を削除する
  • 特定の文字を別の文字へ置き換える
  • ファイルから読み込んだ文章を加工する
  • 数値や変数を文章の中に埋め込む

文字列操作は、Pythonを学び始めた初心者が最もよく使う機能のひとつです。

前回の「ファイル操作」でテキストファイルを読み込めるようになりましたが、読み込んだ文字列を実際に利用するためには、今回紹介する文字列操作が欠かせません。

今回は、次の機能について解説します。

  • split()
  • replace()
  • strip()
  • upper()
  • lower()
  • f文字列

それぞれの基本的な使い方だけでなく、実際のプログラムでどのように使うのかも確認していきましょう。


文字列とは

Pythonにおける文字列とは、文字や文章をまとめて扱うためのデータ型です。

文字列は、シングルクォートまたはダブルクォートで囲んで記述します。

name = "Python"
message = 'こんにちは'

どちらを使用しても、基本的な動作は同じです。

print(name)
print(message)

実行結果は次のようになります。

Python
こんにちは

文字列のデータ型はstrです。

type()を使うと、変数のデータ型を確認できます。

text = "Pythonを勉強しています"

print(type(text))

実行結果は次のとおりです。

<class 'str'>

Pythonでは、文字列に対してさまざまな処理を実行できます。

今回紹介するsplit()replace()などは、文字列型が持っている「メソッド」と呼ばれる機能です。


split()で文字列を分割する

split()は、ひとつの文字列を指定した区切り文字で分割するためのメソッドです。

文字列を分割した結果は、リストとして返されます。

基本的な使い方

次の例では、カンマを区切り文字として文字列を分割しています。

text = "apple,banana,orange"

fruits = text.split(",")

print(fruits)

実行結果は次のようになります。

['apple', 'banana', 'orange']

"apple,banana,orange"というひとつの文字列が、3つの要素を持つリストに変換されました。

そのため、リストと同じようにインデックスを指定して値を取り出せます。

text = "apple,banana,orange"
fruits = text.split(",")

print(fruits[0])
print(fruits[1])
print(fruits[2])

実行結果は次のとおりです。

apple
banana
orange

空白で分割する

split()の引数を省略すると、空白や改行などを基準に文字列を分割します。

text = "Python is easy"

words = text.split()

print(words)

実行結果は次のようになります。

['Python', 'is', 'easy']

文章を単語ごとに分割したい場合に便利です。

複数の空白がある場合

引数を指定せずにsplit()を使用すると、空白が複数あってもまとめて区切りとして扱われます。

text = "Python    is   easy"

words = text.split()

print(words)

実行結果は次のとおりです。

['Python', 'is', 'easy']

一方で、区切り文字として明示的に半角スペースを指定すると、結果が異なる場合があります。

text = "Python    is   easy"

words = text.split(" ")

print(words)

実行結果には、空文字列が含まれます。

['Python', '', '', '', 'is', '', '', 'easy']

単純に空白で単語を分割したい場合は、引数を省略したsplit()を使うのがおすすめです。

分割する回数を指定する

split()の第2引数には、分割する最大回数を指定できます。

text = "2026-07-18"

result = text.split("-", 1)

print(result)

実行結果は次のようになります。

['2026', '07-18']

最初のハイフンだけで分割され、それ以降はひとつの文字列として残ります。

入力されたデータを分割する

split()は、ユーザーが入力した値を複数のデータに分ける場合にも使用できます。

text = input("名前と年齢を空白で入力してください:")

name, age = text.split()

print("名前:", name)
print("年齢:", age)

実行例は次のとおりです。

名前と年齢を空白で入力してください:田中 25
名前: 田中
年齢: 25

分割後の要素数と、左側に用意する変数の数が一致している必要があります。

たとえば、入力された値が3つあるのに変数を2つしか用意していない場合はエラーになります。


replace()で文字列を置き換える

replace()は、文字列の一部を別の文字列へ置き換えるためのメソッドです。

基本的な書き方は次のとおりです。

文字列.replace("置き換え前", "置き換え後")

基本的な使い方

text = "私はJavaを勉強しています"

new_text = text.replace("Java", "Python")

print(new_text)

実行結果は次のようになります。

私はPythonを勉強しています

文字列内にあるJavaPythonへ置き換えられました。

元の文字列は変更されない

文字列にreplace()を使用しても、元の変数の内容は変更されません。

text = "私はJavaを勉強しています"

text.replace("Java", "Python")

print(text)

実行結果は次のとおりです。

私はJavaを勉強しています

置き換え後の文字列を利用するには、戻り値を変数へ代入する必要があります。

text = "私はJavaを勉強しています"

text = text.replace("Java", "Python")

print(text)

実行結果は次のようになります。

私はPythonを勉強しています

Pythonの文字列は、作成後に内容を直接変更できない「イミュータブル」という性質を持っています。

そのため、replace()は元の文字列を書き換えるのではなく、置き換え後の新しい文字列を作成します。

複数の文字をまとめて置き換える

置き換え対象が文字列内に複数ある場合は、すべて置き換えられます。

text = "猫と猫が遊んでいます"

new_text = text.replace("猫", "犬")

print(new_text)

実行結果は次のとおりです。

犬と犬が遊んでいます

置き換える回数を指定する

replace()の第3引数には、置き換える最大回数を指定できます。

text = "猫と猫と猫がいます"

new_text = text.replace("猫", "犬", 2)

print(new_text)

実行結果は次のようになります。

犬と犬と猫がいます

先頭から2つだけが置き換えられています。

特定の文字を削除する

置き換え後の文字列に空文字列""を指定すると、対象の文字を削除できます。

text = "090-1234-5678"

phone_number = text.replace("-", "")

print(phone_number)

実行結果は次のとおりです。

09012345678

電話番号や商品コードからハイフンを削除したい場合などに便利です。


strip()で前後の空白や改行を削除する

strip()は、文字列の先頭と末尾にある空白や改行を削除するためのメソッドです。

ユーザー入力やファイルから読み込んだ文字列には、不要な空白や改行が含まれていることがあります。

そのようなデータを整えるときにstrip()を使用します。

基本的な使い方

text = "   Python   "

result = text.strip()

print(result)

実行結果は次のようになります。

Python

文字列の先頭と末尾にあった空白が削除されました。

ただし、文字列の途中にある空白は削除されません。

text = "   Python is easy   "

result = text.strip()

print(result)

実行結果は次のとおりです。

Python is easy

Pythonisの間にある空白は、そのまま残っています。

改行を削除する

ファイルから1行ずつ文字列を読み込むと、末尾に改行文字\nが含まれることがあります。

text = "Python\n"

print(text)

この文字列にstrip()を使用すると、末尾の改行を削除できます。

text = "Python\n"

result = text.strip()

print(result)

実行結果は次のとおりです。

Python

前回学習したファイル操作と組み合わせる場合は、次のように記述できます。

with open("sample.txt", "r", encoding="utf-8") as file:
    for line in file:
        text = line.strip()
        print(text)

これにより、各行の末尾に含まれる改行を削除してから表示できます。

指定した文字を削除する

strip()の引数に文字を指定すると、文字列の先頭と末尾から指定した文字を削除できます。

text = "---Python---"

result = text.strip("-")

print(result)

実行結果は次のようになります。

Python

ただし、strip()は指定した文字列そのものを削除するのではなく、指定された文字の集合を先頭と末尾から削除します。

text = "abcPythoncba"

result = text.strip("abc")

print(result)

実行結果は次のとおりです。

Python

abcのいずれかが先頭または末尾にある間、それらの文字が削除されます。

lstrip()とrstrip()

先頭だけを削除したい場合はlstrip()を使用します。

text = "   Python   "

result = text.lstrip()

print(result)

末尾だけを削除したい場合はrstrip()を使用します。

text = "   Python   "

result = text.rstrip()

print(result)

それぞれ、次のように使い分けます。

  • strip():先頭と末尾を削除
  • lstrip():先頭だけを削除
  • rstrip():末尾だけを削除

upper()で英字を大文字に変換する

upper()は、文字列に含まれる英字をすべて大文字へ変換するメソッドです。

text = "Python is easy"

result = text.upper()

print(result)

実行結果は次のようになります。

PYTHON IS EASY

数字や日本語には影響しません。

text = "Python入門 第12回"

result = text.upper()

print(result)

実行結果は次のとおりです。

PYTHON入門 第12回

大文字・小文字を区別せず比較する

ユーザー入力を判定するときは、大文字と小文字の違いによって処理が失敗することがあります。

answer = input("yesまたはnoを入力してください:")

if answer == "YES":
    print("処理を続けます")

この場合、ユーザーがyesYesと入力すると条件に一致しません。

そこで、入力された文字列をupper()で大文字に統一してから比較します。

answer = input("yesまたはnoを入力してください:")

if answer.upper() == "YES":
    print("処理を続けます")
else:
    print("処理を終了します")

これなら、次のどの入力でも同じように判定できます。

yes
YES
Yes
yEs

lower()で英字を小文字に変換する

lower()は、文字列に含まれる英字をすべて小文字へ変換するメソッドです。

text = "Python Is Easy"

result = text.lower()

print(result)

実行結果は次のようになります。

python is easy

メールアドレスを小文字に統一する

メールアドレスやユーザーIDなどを小文字に統一したい場合に使用できます。

email = "USER@EXAMPLE.COM"

email = email.lower()

print(email)

実行結果は次のとおりです。

user@example.com

strip()と組み合わせる

実際のプログラムでは、複数の文字列メソッドを続けて使用することがあります。

answer = input("yesまたはnoを入力してください:")

answer = answer.strip().lower()

if answer == "yes":
    print("処理を続けます")
else:
    print("処理を終了します")

この例では、次の順番で処理されています。

  1. strip()で前後の空白を削除する
  2. lower()で英字を小文字に変換する
  3. "yes"と比較する

そのため、ユーザーが次のように入力しても正しく判定できます。

 YES
Yes
 yes

メソッドを続けて書く方法を「メソッドチェーン」と呼ぶことがあります。

answer.strip().lower()

処理の順番は左から右です。


f文字列で変数を文章に埋め込む

f文字列は、文字列の中に変数や計算結果を埋め込むための機能です。

正式には「フォーマット済み文字列リテラル」と呼ばれます。

文字列の先頭にfを付け、埋め込みたい値を波かっこ{}で囲みます。

name = "田中"

message = f"こんにちは、{name}さん"

print(message)

実行結果は次のようになります。

こんにちは、田中さん

複数の変数を埋め込む

ひとつの文字列に複数の変数を埋め込むこともできます。

name = "田中"
age = 25

message = f"{name}さんは{age}歳です"

print(message)

実行結果は次のとおりです。

田中さんは25歳です

文字列型だけでなく、整数型や小数型などもそのまま埋め込めます。

波かっこの中で計算する

f文字列の波かっこの中には、変数だけでなく簡単な式も記述できます。

price = 1000
quantity = 3

print(f"合計金額は{price * quantity}円です")

実行結果は次のようになります。

合計金額は3000円です

小数点以下の桁数を指定する

f文字列では、数値の表示形式も指定できます。

average = 83.4567

print(f"平均点は{average:.2f}点です")

実行結果は次のとおりです。

平均点は83.46点です

:.2fは、小数点以下を2桁で表示する指定です。

同様に、1桁で表示したい場合は:.1fを使用します。

temperature = 24.567

print(f"現在の気温は{temperature:.1f}度です")

実行結果は次のようになります。

現在の気温は24.6度です

3桁ごとにカンマを付ける

金額などの大きな数値には、3桁ごとにカンマを付けると読みやすくなります。

price = 1234567

print(f"価格は{price:,}円です")

実行結果は次のとおりです。

価格は1,234,567円です

パーセントで表示する

小数をパーセント形式で表示することもできます。

rate = 0.856

print(f"達成率は{rate:.1%}です")

実行結果は次のようになります。

達成率は85.6%です

従来の文字列連結との違い

f文字列を使わず、+演算子で文字列を連結することもできます。

name = "田中"
age = 25

message = name + "さんは" + str(age) + "歳です"

print(message)

整数型のageを文字列と連結するために、str()で文字列型へ変換する必要があります。

f文字列を使えば、より短く読みやすく書けます。

name = "田中"
age = 25

message = f"{name}さんは{age}歳です"

print(message)

Pythonでは、変数を含む文章を作成するときはf文字列を使う方法が一般的です。


文字列メソッドを組み合わせる

ここまで紹介したメソッドは、組み合わせて使用できます。

たとえば、カンマ区切りで入力された果物の名前を整理するプログラムを作成してみましょう。

text = input("果物をカンマ区切りで入力してください:")

fruits = text.split(",")

for fruit in fruits:
    fruit = fruit.strip()
    print(f"果物:{fruit}")

実行例は次のとおりです。

果物をカンマ区切りで入力してください:apple, banana, orange
果物:apple
果物:banana
果物:orange

このプログラムでは、次の処理を行っています。

  1. input()で文字列を受け取る
  2. split(",")でカンマごとに分割する
  3. for文でリストの要素をひとつずつ取り出す
  4. strip()で前後の空白を削除する
  5. f文字列で結果を表示する

これまで学習した入力、リスト、繰り返し処理、文字列操作を組み合わせたプログラムです。


ファイルから読み込んだ文字列を加工する

前回学習したファイル操作と組み合わせてみましょう。

次のようなusers.txtがあるとします。

Tanaka,25
Suzuki,30
Yamada,28

このファイルを読み込み、名前と年齢を分けて表示します。

with open("users.txt", "r", encoding="utf-8") as file:
    for line in file:
        line = line.strip()
        name, age = line.split(",")

        print(f"{name}さんは{age}歳です")

実行結果は次のようになります。

Tanakaさんは25歳です
Suzukiさんは30歳です
Yamadaさんは28歳です

それぞれの処理を確認しましょう。

line = line.strip()

strip()で、各行の末尾にある改行を削除しています。

name, age = line.split(",")

カンマを基準に文字列を分割し、結果をnameageへ代入しています。

print(f"{name}さんは{age}歳です")

f文字列を使って、読み込んだデータを文章として表示しています。

このように、ファイル操作と文字列操作は一緒に使用する機会が非常に多くあります。


実践例:簡単なユーザー情報登録

これまで紹介した機能を使って、簡単なユーザー情報登録プログラムを作成します。

name = input("名前を入力してください:").strip()
email = input("メールアドレスを入力してください:").strip().lower()
skills_text = input("スキルをカンマ区切りで入力してください:")

skills = skills_text.split(",")

print()
print("登録内容")
print(f"名前:{name}")
print(f"メールアドレス:{email}")
print("スキル:")

for skill in skills:
    skill = skill.strip()
    print(f"・{skill}")

実行例は次のとおりです。

名前を入力してください: 田中
メールアドレスを入力してください: TANAKA@EXAMPLE.COM
スキルをカンマ区切りで入力してください:Python, HTML, CSS

登録内容
名前:田中
メールアドレス:tanaka@example.com
スキル:
・Python
・HTML
・CSS

このプログラムでは、次の文字列操作を使用しています。

  • strip()で名前やメールアドレスの前後の空白を削除
  • lower()でメールアドレスを小文字へ変換
  • split()でスキルをカンマごとに分割
  • f文字列で登録内容を表示

文字列操作を覚えることで、ユーザー入力を扱うプログラムを作りやすくなります。


よくあるエラーと注意点

メソッドの実行結果を代入していない

次のプログラムでは、replace()を実行していますが、結果を変数へ代入していません。

text = "Javaを勉強しています"

text.replace("Java", "Python")

print(text)

実行結果は元の文字列のままです。

Javaを勉強しています

次のように、結果を変数へ代入します。

text = text.replace("Java", "Python")

strip()upper()lower()についても同じです。

text = text.strip()
text = text.upper()
text = text.lower()

split()の分割数と変数の数が一致しない

次の例では、文字列が3つに分割されるのに、変数が2つしかありません。

text = "apple,banana,orange"

fruit1, fruit2 = text.split(",")

この場合、エラーが発生します。

ValueError: too many values to unpack

3つの変数を用意する必要があります。

fruit1, fruit2, fruit3 = text.split(",")

要素数が決まっていない場合は、リストとして受け取る方法が安全です。

fruits = text.split(",")

split()の区切り文字が存在しない

指定した区切り文字が文字列に含まれていない場合、元の文字列をひとつの要素とするリストが返されます。

text = "apple banana orange"

result = text.split(",")

print(result)

実行結果は次のようになります。

['apple banana orange']

エラーにはなりませんが、想定した分割結果になっているか確認する必要があります。

大文字と小文字は区別される

Pythonでは、大文字と小文字が区別されます。

text = "Python"

print(text == "python")

実行結果は次のとおりです。

False

大文字と小文字を区別せず比較したい場合は、両方をlower()またはupper()で統一します。

text = "Python"

print(text.lower() == "python")

実行結果は次のようになります。

True

strip()は文字列の途中を削除しない

strip()が削除するのは、文字列の先頭と末尾にある空白や改行です。

text = "Python   is   easy"

result = text.strip()

print(result)

実行結果は次のとおりです。

Python   is   easy

途中の空白を削除したい場合は、replace()を使用できます。

text = "Python   is   easy"

result = text.replace(" ", "")

print(result)

実行結果は次のようになります。

Pythoniseasy

ただし、すべての空白が削除されるため、文章として読みにくくなる場合があります。


練習問題

最後に、今回学習した内容を使って練習してみましょう。

練習問題1

次の文字列をカンマで分割し、それぞれの要素を1行ずつ表示してください。

text = "red,blue,green"

実行結果は次のようにします。

red
blue
green

練習問題2

次の文字列に含まれるJavaPythonへ置き換えてください。

text = "私はJavaが好きです"

実行結果は次のようにします。

私はPythonが好きです

練習問題3

次の文字列の前後にある空白を削除してください。

text = "   Hello World   "

練習問題4

ユーザーから英字を入力してもらい、すべて小文字に変換して表示してください。

練習問題5

名前と年齢を変数に代入し、f文字列を使って次の形式で表示してください。

田中さんは25歳です

練習問題の解答例

練習問題1の解答

text = "red,blue,green"

colors = text.split(",")

for color in colors:
    print(color)

練習問題2の解答

text = "私はJavaが好きです"

text = text.replace("Java", "Python")

print(text)

練習問題3の解答

text = "   Hello World   "

text = text.strip()

print(text)

練習問題4の解答

text = input("英字を入力してください:")

text = text.lower()

print(text)

練習問題5の解答

name = "田中"
age = 25

print(f"{name}さんは{age}歳です")

まとめ

今回は、Pythonでよく使用する文字列操作について解説しました。

今回紹介した主な機能は次のとおりです。

メソッド・機能説明
split()文字列を指定した区切り文字で分割する
replace()文字列の一部を別の文字列へ置き換える
strip()文字列の先頭と末尾にある空白や改行を削除する
upper()英字を大文字へ変換する
lower()英字を小文字へ変換する
f文字列文字列の中に変数や計算結果を埋め込む

文字列操作は、ユーザー入力、ファイル操作、データ処理、Webアプリケーションなど、さまざまな場面で使用します。

特に、次のような組み合わせは頻繁に登場します。

text = input("文字を入力してください:").strip()
answer = input("yesまたはno:").strip().lower()
items = text.split(",")
print(f"入力された文字は{text}です")

すべてのメソッドを一度に暗記する必要はありません。

実際にプログラムを書きながら、「文字列を分割したいときはsplit()」「不要な空白を削除したいときはstrip()」というように、少しずつ使い方を覚えていきましょう。

次回は、文字列やリストを効率よく処理するときに役立つ機能について学習していきます。

コメント

タイトルとURLをコピーしました