基礎から学ぶPython入門 90日コース | Python基礎 - Day 4:文字列操作

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 4:文字列操作 ― 「テキストを自在に切ったり貼ったりして、“意味のある情報”に変える」

Day 4では、「文字列操作」を集中的に扱います。 Pythonでテキストを扱う場面は非常に多く、ログ解析、ユーザー入力の処理、ファイルの読み書き、APIレスポンスの整形など、あらゆるところで文字列操作が登場します。 ここでは、連結・f文字列・インデックス・スライス・split()replace()strip()lower()upper()といった基本テクニックを、ステップバイステップで見ていきます。

文字列連結 ― 「バラバラの文字列を1つのメッセージにまとめる」

文字列連結は、「複数の文字列をつなげて1つの文字列にする」操作です。 Pythonでは、+ を使って文字列同士を結合できます。

# 文字列連結の基本

first_name = "Taro"    # 名前
last_name = "Yamada"   # 苗字

# 苗字と名前をスペースでつなげる
full_name = last_name + " " + first_name

print(full_name)  # Yamada Taro と表示されます
Python

ここで重要なのは、「+ は数値の足し算だけでなく、文字列の結合にも使える」ということです。 ただし、「数値と文字列」をそのまま + でつなぐことはできません。

age = 20

# 次の行はエラーになります(数値と文字列はそのまま結合できない)
# message = "年齢は" + age

# 正しくは、数値を文字列に変換してから結合します
message = "年齢は" + str(age) + "歳です"
print(message)  # 年齢は20歳です
Python

str() は、「数値などを文字列に変換する」関数です。 文字列連結をするときは、「全部文字列にそろえる」という意識が大事です。

f文字列 ― 「変数を埋め込んだ読みやすいメッセージを作る」

f文字列(フォーマット文字列)は、Python 3.6以降で使える便利な書き方です。 文字列の前に f を付けて、{} の中に変数や式を書くと、その値が埋め込まれた文字列が作られます。

# f文字列の基本

name = "Taro"
age = 20

# f文字列を使ってメッセージを作る
message = f"名前は{name}で、年齢は{age}歳です"

print(message)  # 名前はTaroで、年齢は20歳です
Python

f文字列のメリットは、「コードが読みやすくなる」ことです。 "名前は" + name + "で、年齢は" + str(age) + "歳です" のような書き方に比べて、 f文字列は「完成形の文章」がそのままコードになっているので、意図が伝わりやすくなります。

さらに、{} の中には式も書けます。

# f文字列の中で計算する例

price = 1000
tax_rate = 0.1

message = f"税込価格は{price * (1 + tax_rate)}円です"
print(message)  # 税込価格は1100.0円です
Python

セキュリティの観点では、「ログメッセージを分かりやすく書く」ことが重要です。 f文字列を使うと、ログに「何が起きたか」「どのユーザーか」「どのIPアドレスか」といった情報を、読みやすい形で残しやすくなります。

インデックス ― 「文字列の中の“1文字”を位置で取り出す」

インデックスは、「文字列の中の特定の位置にある文字」を取り出すための仕組みです。 Pythonでは、文字列の先頭を「0番目」として数えます。

# インデックスの基本

text = "Python"

# 0番目の文字(先頭)
print(text[0])  # 'P'

# 1番目の文字
print(text[1])  # 'y'

# 5番目の文字(最後)
print(text[5])  # 'n'
Python

ここで、「0から始まる」というのが最初のハードルですが、慣れると自然になります。 text[0] が先頭、text[1] が2文字目…というルールです。

インデックスは、「特定の位置の文字をチェックしたいとき」に使います。

# 文字列の先頭が特定の文字かどうかをチェックする例

filename = "secret.txt"

if filename[0] == "s":  # 先頭が's'かどうか
    print("このファイル名は's'から始まります")
Python

ただし、インデックスで範囲外の位置を指定するとエラーになります。

text = "Python"

# 次の行はエラーになります(インデックス6は存在しない)
# print(text[6])
Python

そのため、「文字列の長さ」を意識しながらインデックスを使うことが大事です。

スライス ― 「文字列の一部分を“切り出す”」

スライスは、「文字列の一部分を取り出す」ための機能です。 text[start:end] のように書くと、「start番目から、endの1つ手前まで」の部分文字列が取り出せます。

# スライスの基本

text = "Python"

# 0番目から2番目の手前まで(0と1)
print(text[0:2])  # 'Py'

# 2番目から4番目の手前まで(2と3)
print(text[2:4])  # 'th'

# 先頭から3番目の手前まで
print(text[:3])   # 'Pyt'

# 2番目から最後まで
print(text[2:])   # 'thon'
Python

スライスは、「文字列の一部を取り出して処理したいとき」に非常に便利です。

例えば、「日付文字列から年・月・日を取り出す」例を見てみます。

# 日付文字列から年・月・日を取り出す例

date_str = "2024-08-28"  # 'YYYY-MM-DD'形式の日付

year = date_str[0:4]   # 0〜3文字目 → '2024'
month = date_str[5:7]  # 5〜6文字目 → '08'
day = date_str[8:10]   # 8〜9文字目 → '28'

print("年:", year)
print("月:", month)
print("日:", day)
Python

セキュリティの観点では、「ログの1行からIPアドレス部分だけを取り出す」「固定フォーマットの文字列から特定のフィールドを抜き出す」といった場面でスライスが役立ちます。

split() ― 「区切り文字で文字列を“分割してリストにする”」

split() は、「文字列を特定の区切り文字で分割して、リストにする」メソッドです。 デフォルトでは、空白文字(スペースやタブ)で分割します。

# split()の基本(スペースで分割)

text = "Python is fun"

words = text.split()  # スペースで分割してリストにする

print(words)          # ['Python', 'is', 'fun'] と表示されます
Python

区切り文字を指定することもできます。

# カンマで分割する例

csv_line = "Taro,20,Tokyo"

parts = csv_line.split(",")  # カンマで分割

print(parts)  # ['Taro', '20', 'Tokyo']
Python

split() は、「1行のテキストを複数のフィールドに分解する」場面で非常に重要です。 例えば、ログの1行を「日時」「レベル」「メッセージ」に分ける、といった処理に使えます。

# ログ行を分解する例(簡易版)

log_line = "2024-08-28 INFO User logged in"

parts = log_line.split()  # 空白で分割

date = parts[0]     # '2024-08-28'
level = parts[1]    # 'INFO'
message = " ".join(parts[2:])  # 残りをメッセージとして結合

print("日付:", date)
print("レベル:", level)
print("メッセージ:", message)
Python

ここでは、split() で分割したあと、" ".join(parts[2:]) でメッセージ部分を再結合しています。 このように、「分割してから必要な部分だけ使う」というパターンは、テキスト処理の基本です。

replace() ― 「特定の文字列を別の文字列に置き換える」

replace() は、「文字列の中の特定の部分を、別の文字列に置き換える」メソッドです。

# replace()の基本

text = "I like Python"

# 'Python' を 'JavaScript' に置き換える
new_text = text.replace("Python", "JavaScript")

print(new_text)  # I like JavaScript
Python

replace() は、「危険な文字列を安全な文字列に変換する」といった場面でも使われます。 例えば、HTMLに表示する前に <> をエスケープする簡易例を見てみます。

# 危険な文字をエスケープする簡易例(本格的には専用ライブラリを使うべきです)

user_input = "<script>alert('XSS');</script>"

safe_input = user_input.replace("<", "<").replace(">", ">")

print("元の入力:", user_input)
print("エスケープ後:", safe_input)
Python

ここでは、<&lt; に、>&gt; に置き換えています。 実際のWebアプリでは、専用のエスケープ関数を使うべきですが、「危険な文字列を別の文字列に変える」という発想は同じです。

strip() ― 「前後の余計な空白や改行を取り除く」

strip() は、「文字列の前後にある空白や改行などを取り除く」メソッドです。 ユーザー入力やファイルから読み込んだテキストには、意図しない空白が含まれていることがよくあります。

# strip()の基本

text = "  hello world  \n"

print(f"元の文字列: '{text}'")        # 前後に空白や改行がある
clean_text = text.strip()             # 前後の空白・改行を削除
print(f"strip後の文字列: '{clean_text}'")
Python

strip() は、「前後の空白を削除する」場面で非常に便利です。 例えば、ユーザーが入力したIDやパスワードの前後に空白が入っていても、それを無視したいときに使えます。

# ユーザー入力の前後の空白を削除する例

user_id = "  user123  "  # 前後に空白が入っている

clean_user_id = user_id.strip()

print(f"入力されたID: '{user_id}'")
print(f"整形後のID: '{clean_user_id}'")
Python

セキュリティの観点では、「入力値を正しく整形する」ことが重要です。 前後の空白や改行を取り除いてからチェックすることで、「意図しない形でチェックをすり抜ける」リスクを減らせます。

lower() / upper() ― 「大文字・小文字をそろえて比較しやすくする」

lower() は「文字列をすべて小文字に変換する」、upper() は「すべて大文字に変換する」メソッドです。

# lower() / upper()の基本

text = "PyThOn"

print(text.lower())  # 'python'(全部小文字)
print(text.upper())  # 'PYTHON'(全部大文字)
Python

これらは、「大文字・小文字の違いを無視して比較したいとき」に役立ちます。

# 大文字・小文字を無視して比較する例

answer = "Yes"  # ユーザーの入力(大文字・小文字はバラバラかもしれない)

# 小文字にそろえてから比較する
if answer.lower() == "yes":
    print("はいと答えました")
else:
    print("はい以外の答えです")
Python

セキュリティの観点では、「ユーザー名やメールアドレスの比較」「特定のコマンド文字列の判定」などで、大文字・小文字をそろえることが重要です。 例えば、メールアドレスのローカル部分は大文字・小文字を区別する場合もありますが、多くのシステムでは小文字にそろえて扱うことが多いです。

Day 4のまとめと次へのつながり

Day 4では、

文字列連結(+str()) f文字列(f"..."{}) インデックス(text[0] のような位置指定) スライス(text[start:end] で部分文字列を取り出す) split()(区切り文字で分割してリストにする) replace()(特定の文字列を別の文字列に置き換える) strip()(前後の空白や改行を削除する) lower() / upper()(大文字・小文字をそろえる)

を学びました。

ここまで理解できると、「テキストを受け取って、必要な部分だけ取り出し、整形して、意味のある情報に変える」という処理がかなり書けるようになります。 次のステップでは、これらの文字列操作を「条件分岐」や「ループ」と組み合わせて、ログ解析や簡単な入力チェックなど、より実用的なミニプログラムを作っていきます。

Day 4で特に重要なのは、「文字列はただの“文字の並び”ではなく、切ったり貼ったり変換したりできる“データ”だ」という感覚です。 この感覚が身につくと、セキュリティ的にも「危険な文字列をどう扱うか」「ログから何を読み取るか」といった視点を、自然とコードの中に織り込めるようになっていきます。


Day 4:文字列操作で「文字数カウンター」を作る

Day 4の制作編では、「文字数カウンター」を題材にして、文字列操作の基本を一気に体験していきます。 文字列連結、f文字列、インデックス、スライス、split()replace()strip()lower()upper()を、 すべて「入力された文章を分析するツール」の中で使っていく流れで説明します。

文字数カウンターの全体イメージ

まず、「文字数カウンターでやりたいこと」を整理します。

  • ユーザーに文章を入力してもらう
  • その文章の「文字数」を数えて表示する
  • ついでに「単語数」や「大文字・小文字変換」「前後の空白除去」なども試す

この中で、文字列操作の各機能を自然に使っていきます。

文字列連結とf文字列 ― 結果をわかりやすく表示する

文字数カウンターでは、「結果をメッセージとして表示する」場面が多くなります。 そこでまず、文字列連結とf文字列を押さえておきます。

text = "Python入門"

# 文字列連結の例
message = "入力された文字列は「" + text + "」です。"
print(message)

# f文字列の例(こちらの方が読みやすくておすすめです)
message_f = f"入力された文字列は「{text}」です。"
print(message_f)
Python
  • 文字列連結は + を使って文字列同士をつなぎます。
  • f文字列は、f"..." の中に {変数} を書くことで、変数の値を埋め込めます。

文字数カウンターでは、f文字列を使うと「文字数」や「単語数」をわかりやすく表示できます。

インデックスとスライス ― 文字列の一部を取り出す

文字列は「文字の並び」なので、インデックスやスライスで一部を取り出すことができます。

text = "Hello"

# インデックスで1文字ずつ取り出す
print(text[0])  # 'H'
print(text[1])  # 'e'
print(text[2])  # 'l'

# スライスで部分文字列を取り出す
print(text[0:2])  # 'He'(0番目から1番目まで)
print(text[1:4])  # 'ell'(1番目から3番目まで)
print(text[2:])   # 'llo'(2番目から最後まで)
print(text[:3])   # 'Hel'(先頭から2番目まで)
Python

インデックスとスライスは、「先頭の数文字だけを表示したい」「一部だけを抜き出したい」といった場面で使います。 文字数カウンターでは、「入力された文章の先頭10文字だけをプレビューする」といった機能に応用できます。

split() ― 文章を「単語」に分割する

文字数カウンターを少し発展させて、「単語数」も数えてみます。 ここで split() が登場します。

text = "Python を 基礎から 学ぶ 入門コース"

# 空白で分割して単語のリストにする
words = text.split()  # デフォルトでは空白文字で分割します

print("単語リスト:", words)
print("単語数:", len(words))
Python

split() は、「区切り文字で文字列を分割してリストにする」メソッドです。 デフォルトでは空白(スペースなど)で分割されるので、日本語と英語が混ざった文章でも、 ある程度「単語っぽい単位」に分けることができます。

区切り文字を指定することもできます。

csv_text = "apple,banana,orange"

fruits = csv_text.split(",")  # カンマで分割
print(fruits)  # ['apple', 'banana', 'orange']
Python

文字数カウンターでは、「文字数」と「単語数」の両方を表示することで、 文章のボリュームをより立体的に把握できるようになります。

replace() ― 特定の文字や単語を置き換える

replace() は、「文字列の中の特定の部分を別の文字列に置き換える」メソッドです。

text = "Pythonは楽しい。Pythonを学びましょう。"

# "Python" を "PYTHON" に置き換える
new_text = text.replace("Python", "PYTHON")

print("元の文章:", text)
print("置き換え後:", new_text)
Python

文字数カウンターでは、「特定の記号を取り除く」「全角スペースを半角スペースに統一する」といった前処理に使えます。

text = "Python 入門 コース"  # 全角スペースが含まれている

# 全角スペースを半角スペースに置き換える
normalized_text = text.replace(" ", " ")

print("正規化後の文章:", normalized_text)
Python

こうした前処理をしてから split() することで、より正確な単語数を数えられるようになります。

strip() ― 前後の余計な空白を取り除く

strip() は、「文字列の前後にある空白(スペースや改行など)を取り除く」メソッドです。

text = "   Python入門   \n"

print("strip前:", repr(text))
clean_text = text.strip()
print("strip後:", repr(clean_text))
Python

repr() を使うと、改行やスペースが可視化されるので違いが分かりやすくなります。

文字数カウンターでは、「入力された文章の前後に余計な空白があっても、それを無視して文字数を数える」ために使えます。

user_input = input("文章を入力してください: ")

clean_input = user_input.strip()  # 前後の空白を除去

length = len(clean_input)
print(f"前後の空白を除いた文字数は {length} です。")
Python

lower() / upper() ― 大文字・小文字を統一する

lower() は「小文字に変換」、upper() は「大文字に変換」するメソッドです。 英字を扱うときに特に重要です。

text = "PyThOn 入門 COURSE"

print("小文字に変換:", text.lower())
print("大文字に変換:", text.upper())
Python

文字数カウンターでは、「単語の出現回数を数える」ときに、大文字・小文字を統一しておくと便利です。

text = "Python python PYTHON"

normalized = text.lower()  # すべて小文字に統一
words = normalized.split()

print("正規化後の単語リスト:", words)
print("pythonの出現回数:", words.count("python"))
Python

このように、「表記ゆれ」をなくすことで、より正確な分析ができるようになります。

文字数カウンターの完成版(コメント付き)

最後に、ここまでの内容をまとめた「文字数カウンター」のサンプルコードを示します。 コメントを多めに入れて、初心者の方にも読みやすい形にしています。

# 文字数カウンター(簡易版)

# ユーザーから文章を入力してもらいます
user_input = input("文章を入力してください: ")

# 前後の空白を取り除きます
clean_text = user_input.strip()

# 文字数を数えます
char_count = len(clean_text)

# 全角スペースを半角スペースに統一します
normalized_text = clean_text.replace(" ", " ")

# 小文字に統一します(英字の分析用)
lower_text = normalized_text.lower()

# 単語に分割します(空白で分割)
words = normalized_text.split()
word_count = len(words)

# 結果を表示します(f文字列を使用)
print(f"入力された文章: 「{clean_text}」")
print(f"文字数(前後の空白除去後): {char_count}")
print(f"単語数(空白区切り): {word_count}")

# 先頭10文字だけをプレビュー(スライス)
preview = clean_text[:10]
print(f"先頭10文字のプレビュー: 「{preview}」")

# 大文字・小文字変換の例
print("小文字に統一した文章:", lower_text)
print("大文字に統一した文章:", normalized_text.upper())
Python

このサンプルでは、

  • strip() で前後の空白を除去
  • replace() で全角スペースを半角スペースに統一
  • lower() / upper() で大文字・小文字を変換
  • split() で単語に分割して単語数をカウント
  • len() で文字数をカウント
  • スライスで先頭10文字をプレビュー
  • f文字列で結果をわかりやすく表示

という流れを一つのツールの中で体験できます。

Day 4(制作編)のまとめ

Day 4の制作編では、「文字数カウンター」を通して、

  • 文字列連結とf文字列で「結果メッセージ」を組み立てる
  • インデックスとスライスで「部分文字列」を扱う
  • split() で文章を「単語」に分割する
  • replace() で特定の文字や記号を置き換える
  • strip() で前後の余計な空白を取り除く
  • lower() / upper() で表記ゆれをなくす

という一連の文字列操作を体験していただきました。

ここまで来ると、「文字列はただのテキストではなく、“分析・整形・検査の対象”として扱えるデータ」だという感覚が少しずつ育っているはずです。 この感覚を土台に、今後はログ解析、入力バリデーション、テキスト前処理など、 より実践的でセキュリティも意識した文字列処理へと自然に進んでいくことができます。

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