Python × 入門 | #18 文字列を自在に操ろう

0-17では例外処理を学びました。今回は文字列に用意されているメソッドを使って、テキストデータを思い通りに加工する方法を身につけます。

文字列メソッド

まずはPycoBlocksを開こう

下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。

メソッド 意味
split(sep)区切り文字で分割してリストにする"a,b,c".split(",") → ["a","b","c"]
join(list)リストの要素を結合して文字列にする"-".join(["a","b","c"]) → "a-b-c"
strip()両端の空白・改行を取り除く" hi ".strip() → "hi"
replace(old, new)文字列を置換する"hello".replace("l","r") → "herro"
find(sub)部分文字列の位置を返す(なければ-1)"hello".find("ll") → 2

ステップ1:split で文字列を分割する

split は区切り文字を指定して文字列をリストに分割するメソッドです。CSV データや文章の単語分割によく使います。

splitで文字列をリストに分割するブロック例
text = "apple,banana,cherry"
words = text.split(",")
print(words)          # ['apple', 'banana', 'cherry']
print(words[1])       # banana

# 引数なしは空白区切り
sentence = "one two three"
parts = sentence.split()
print(parts)          # ['one', 'two', 'three']

ステップ2:join でリストを結合する

joinsplit の逆操作です。リストの各要素を指定した文字列でつなぎ合わせます。

join メソッドのブロック例
colors = ["赤", "青", "緑"]
result = " - ".join(colors)
print(result)         # 赤 - 青 - 緑

# CSV 形式に変換する例
nums = ["10", "20", "30"]
csv_line = ",".join(nums)
print(csv_line)       # 10,20,30

ステップ3:strip・replace で文字列を整える

ユーザー入力には余分な空白が混ざりやすい。strip で前後の空白を取り除き、replace で特定の文字を置換できます。

strip・replace・lstrip・rstrip メソッドのブロック例
raw = "  hello world  "
s = raw.strip()
print(s)              # hello world

new_s = s.replace("world", "Python")
print(new_s)          # hello Python

# lstrip・rstrip で片側だけ除去もできる
hi = "  hi  "
print(hi.lstrip())   # "hi  "
print(hi.rstrip())   # "  hi"

ステップ4:find で文字列を検索する

find は部分文字列が最初に現れる位置(インデックス)を返します。見つからないときは -1 を返す点が重要です。

find メソッドのブロック例
text = "Python is fun and Python is powerful"
pos = text.find("Python")
print(pos)            # 0(最初の位置)

pos2 = text.find("Python", 1)   # 1文字目以降で検索
print(pos2)           # 17

pos3 = text.find("Java")
print(pos3)           # -1(見つからない)

# find の結果で存在確認
if text.find("fun") != -1:
    print("fun が含まれている")

コーディングモードで書いてみよう

PycoBlocks の「コーディングモード」に切り替えると、これらのメソッドを直接コードで試せます。ブロックで表現できない細かい操作もここで確認しましょう。

# split → join の組み合わせ(文字列の前後を揃える)
text = "  apple , banana , cherry  "
parts = [p.strip() for p in text.split(",")]
result = ", ".join(parts)
print(result)   # apple, banana, cherry

# 大文字・小文字の変換
word = "Hello World"
print(word.upper())    # HELLO WORLD
print(word.lower())    # hello world
print(word.title())    # Hello World(既にタイトルケース)

# 文字列の中身を確認するメソッド
print("123".isdigit())    # True
print("abc".isalpha())    # True
print("abc123".isalnum()) # True

演習課題

課題18-1:CSV を分解して表示する

"田中,25,東京" という CSV 形式の文字列を split で分解し、名前・年齢・都市をそれぞれ別の行に表示するプログラムを書いてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

CSVをsplitして各要素を表示するブロック例
data = "田中,25,東京"
parts = data.split(",")
print("名前:", parts[0])
print("年齢:", parts[1])
print("都市:", parts[2])

解説: split(",") でコンマ区切りのリストを作り、インデックスで各要素にアクセスします。これが CSV 処理の基本パターンです。

課題18-2:単語を数える

文字列 "the quick brown fox jumps over the lazy dog" に含まれる単語数を split を使って求めてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

引数なしsplitで単語数をカウントするブロック例
sentence = "the quick brown fox jumps over the lazy dog"
words = sentence.split()
print("単語数:", len(words))   # 9

解説: 引数なしの split() は連続する空白をまとめて区切り文字として扱います。len でリストの長さを取れば単語数がわかります。

課題18-3:入力を整形する

ユーザーが名前を入力するとき、前後に余分な空白が入ることがあります。入力を受け取り、前後の空白を除去してから「こんにちは、〇〇さん!」と表示するプログラムを書いてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

input+stripで前後空白を除去するブロック例
name = input("名前を入力: ")
name = name.strip()
print("こんにちは、" + name + "さん!")

解説: input の直後に strip を適用するのは実務でよく使うパターンです。ユーザー入力の前処理として必ず覚えておきましょう。

課題18-4:検閲フィルター

文字列の中の "悪口" という単語を "****" に置換するプログラムを書いてみましょう。さらに find を使って、置換前に単語が含まれているかどうかを確認してから置換するようにしましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

find+replaceでNGワードを検閲するブロック例
text = "ネット上の悪口はやめましょう。"
if text.find("悪口") != -1:
    text = text.replace("悪口", "****")
    print("検閲済み:", text)
else:
    print("問題なし:", text)

解説: find で存在を確認してから replace するパターン。実際には replace だけでも動くが、条件分岐を組み合わせることで「含まれていた場合のみ処理する」フローが作れます。

課題18-5:タグ付きリストを整形する

" Python , Java , C++ " のような、各要素の前後に空白が入った CSV 文字列を受け取り、すべての空白を除去したうえで "/" で結合して表示するプログラムを書いてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

splitとstripでリストをクリーニングするブロック例
raw = "  Python  ,  Java  ,  C++  "
parts = raw.split(",")
cleaned = []
for p in parts:
    cleaned.append(p.strip())
result = "/".join(cleaned)
print(result)   # Python/Java/C++

解説: split で分割した後、各要素に strip をかけてから join で再結合します。データクリーニングの基本的な流れです。

まとめ

  • split(sep) は文字列を区切り文字でリストに分割します
  • join(list) はリストの要素を文字列で結合します
  • strip() は前後の空白・改行を除去します
  • replace(old, new) は文字列を置換します
  • find(sub) は部分文字列の位置を返し、なければ -1 を返します
  • これらを組み合わせることで CSV 処理や入力値の整形ができます

Back to top