ファイル名から特定のキーワードを探したい。データから余分なスペースを取り除きたい。IDを「0001」のように桁を揃えたい——日々のコーディングで、文字列を扱わない日はほとんどありません。✍️
Pythonの文字列には、こうした作業をたった一行で済ませてくれる便利なメソッドが大量に用意されています。これを知っているかどうかで、コードの読みやすさも書く速度も劇的に変わります。今日からあなたのコードに「文字列を自在に操る力」を加えていきましょう。✨
少し驚くかもしれませんが、Pythonの文字列はstrクラスのオブジェクトです。"バナナ" という何気ない文字列も、内部的にはstrクラスが持つ便利なメソッドを呼び出せる「賢いデータ」なのです。🧠
Pythonは「すべてがオブジェクト」という設計思想で作られていて、整数も浮動小数点もリストも、そして関数までもがオブジェクト。だからこそ、"hello".upper() のように、変数や値に対してドット記法でメソッドを呼び出せるわけです。
strクラスには100以上のメソッドが用意されています。すべてを覚える必要はありませんが、「これだけは知っておくべき定番メソッド」を押さえておくと、文字列処理の質が一気に上がります。📈
startswith は文字列が指定した文字で始まるか、endswith は指定した文字で終わるかを判定するメソッド。結果は True または False で返ってきます。
file_name = "second_term_student.csv"
print(file_name.startswith("second")) # True
print(file_name.endswith(".csv")) # True
たとえば、2学期のデータだけが second_ から始まるファイル名で保存されていたとします。フォルダ内のCSVを一括処理しながら、2学期のものだけを抽出したいときに startswith が便利です。
import os
for file_name in os.listdir("data/"):
if file_name.startswith("second_") and file_name.endswith(".csv"):
# 2学期のCSVファイルだけ処理
process_file(file_name)
正規表現でも同じことはできますが、直感的で読みやすいのがstartswith/endswithの強みです。⚡
replace は文字列の中の特定の部分を別の文字列に置き換えるメソッド。第1引数に置換前、第2引数に置換後を指定します。
x = "あいうえお"
result = x.replace("う", "と")
print(result) # あいとえお
注意点として、replaceは文字列の中でヒットする箇所をすべて置換します。
x = "Japanese Foods & Japanese Sports"
result = x.replace("Japanese", "French")
print(result) # French Foods & French Sports
"Japanese" が2か所あれば、両方とも "French" に置き換わります。一部だけ置換したい場合は、第3引数に置換回数を指定できます。👌
第2引数を空文字列にすれば、その文字列を削除するのと同じ効果になります。
x = "Japanese Foods & Japanese Sports"
result = x.replace("Japanese ", "")
print(result) # Foods & Sports
「文字列の中のあのキーワードだけ消したい」——そんなときの定番テクニックです。🗑️
join はイテラブル(リスト・タプル・集合など)の各要素を区切り文字で連結するメソッド。少し独特な書き方なので注意です。
x = ["トマト", "バナナ", "レモン"]
result = "-".join(x)
print(result) # トマト-バナナ-レモン
「区切り文字」のほうに .join() を付けるのがポイント。"区切り文字".join(リスト) という形を覚えてしまえばOKです。✨
x = ["トマト", "バナナ", "レモン"]
print(" ".join(x)) # トマト バナナ レモン
print(",".join(x)) # トマト,バナナ,レモン
print("".join(x)) # トマトバナナレモン(区切りなし)
CSVファイルの行を作るときや、ログ出力のフォーマットを整えるときに頻出のテクニックです。📊
strip は文字列の先頭と末尾の空白文字を削除するメソッド。データのクレンジングで超頻出です。
x = " 田中 太郎 "
result = x.strip()
print(result) # "田中 太郎"
引数なしで呼び出すと、半角・全角スペース、タブ、改行などの空白文字をまとめて削除してくれます。🧹
x = "__2021_01_12__"
result = x.strip("_")
print(result) # "2021_01_12"
「両端のアンダースコアだけ消したい」というときに、引数で削除したい文字を指定できます。
lstrip:Left strip → 文字列の左側(先頭)だけ削除rstrip:Right strip → 文字列の右側(末尾)だけ削除x = " 田中 太郎 "
print(x.lstrip()) # "田中 太郎 "
print(x.rstrip()) # " 田中 太郎"
replaceとの違いは「先頭・末尾だけ」を対象とすること。replaceは文字列中のすべてを置換しますが、stripは端っこだけ。上手に使い分けがポイントです。🎯
zfill は指定した桁数までゼロで埋めてくれるメソッド。IDの生成やファイル名の連番作成で大活躍します。
x = "302901"
result = x.zfill(10)
print(result) # "0000302901"
10桁になるよう、左側に自動的に0が追加されました。f文字列の :010 でも同じことはできますが、zfillは文字列にも使えるのが強みです。
x = "302901-01"
result = x.zfill(15)
print(result) # "000000302901-01"
ハイフンが入った文字列でも、全体の桁数を15桁になるよう先頭を0で埋めてくれます。f文字列のゼロ埋めはデータ型が数値である必要がある一方、zfillは文字列なら何でもOK。使い勝手の良さで言えばzfillが一歩リードです。👍
x = "-302901"
result = x.zfill(10)
print(result) # "-000302901"
先頭が + や - の符号の場合は、その後ろが0埋めされます。会計データなどで便利な仕様です。💰
最後に基本中の基本、upper と lower。文字列を全て大文字/小文字に変換します。
x = "aBcDeF"
print(x.upper()) # "ABCDEF"
print(x.lower()) # "abcdef"
大文字小文字の違いを無視して文字列比較したいときの定番。「ユーザー入力を正規化する」「メールアドレスを統一する」場面で必ず使います。✉️
文字列メソッドは、知っているか知らないかでコードの質が大きく変わる領域。良書を手元に置いておけば、引き出しが一気に増えます。
文字列操作の基本から体系的に学べる定番書。各メソッドが「なぜ」「どう動くのか」が腹落ちします。
標準ライブラリの活用法やPythonらしい書き方を深く学べる1冊。文字列処理の応用テクニックも豊富です。
ファイル名処理・テキスト解析・データクレンジング——文字列メソッドが活躍する実用シーンの宝庫。「学んだことが日常で役立つ」を最速で体感できます。
「どんなメソッドを選ぶべきか」も含めて、Pythonコミュニティの推奨スタイルが90項目に凝縮。中級者必読。
文字列メソッドを試行錯誤するとタイピング量が増えがち。打鍵感が良く複数デバイス切替対応のキーボードがあると、集中力が長く続きます。
いいえ、文字列はイミュータブル(変更不可)な型なので、すべてのメソッドは「新しい文字列を返す」だけで元の文字列は変わりません。x.upper() としても x 自体は元のまま。結果を使いたいなら y = x.upper() のように代入する必要があります。📝
単純な文字列の置換ならreplaceで十分。パターンに基づいた複雑な置換(電話番号のフォーマット変更など)が必要なら re.sub() を使いましょう。「シンプルで済むことはシンプルに」が鉄則です。⚡
はい、joinはすべての要素が文字列である必要があります。数値を含むリストを結合したい場合は ",".join(map(str, [1, 2, 3])) のようにstr型に変換してから渡しましょう。🔢
消せません。stripは先頭と末尾だけを対象とします。文字列の途中の空白も含めて削除したい場合は、replace(" ", "") を使うか、より柔軟に処理するなら "".join(x.split()) といったテクニックがあります。🧹
用途次第。数値をフォーマットして表示するならf文字列(f"{x:010}")が直感的。文字列を扱う、または記号を含むならzfillが万能です。両方の引き出しを持っておくと困りません。✨
今日紹介した文字列メソッドをおさらいすると——
これらはPythonで文字列を扱うすべての場面で必ず登場する基本中の基本。今日からあなたのコードに自然に組み込めば、見違えるほど読みやすく、書きやすくなります。次のコーディングで、ぜひ一つでも使ってみてください。コードの景色が変わるはずです。🚀