文字列型の概要(str の基本)
Pythonの文字列型(str)は、テキストデータを表現・操作するための基本データ型です。シングルクォート(’)やダブルクォート(”)で囲むだけで作れ、画面表示やファイル入出力、ログ整形などあらゆる場面で中心的な役割を果たします。文字列は「イミュータブル(不変)」で、一度作成した文字列オブジェクトの中身は直接変更できません。変更したい場合は、新しい文字列を生成します。
文字列の作り方と基本操作
クォートとエスケープの使い分け
文字列は ‘ または ” で囲みます。文中にクォートを含めたい場合は、外側と内側のクォートを使い分けるか、バックスラッシュでエスケープします。
text1 = 'I\'m learning Python' # エスケープ
text2 = "He said, \"Hello!\"" # エスケープ
text3 = "I'm learning Python" # ダブルクォートを外側に
text4 = 'He said, "Hello!"' # シングルクォートを外側に
Pythonこの「どちらのクォートでも定義できる」性質を活かすと、エスケープを減らせます。
複数行文字列と改行
三重引用符(”””…””” または ”’…”’)で複数行文字列を作れます。文章やテンプレートに便利です。
doc = """複数行の文字列
改行や"引用"もそのまま書けます
"""
Python改行やタブなどの特殊文字は、\n(改行)、\t(タブ)のエスケープシーケンスで書けます。
結合・繰り返し・長さ
- は結合、* は繰り返し、len() は文字数を返します。大量結合は join が高速でメモリ効率も良いです。
greet = "Hello, " + "Python"
echo = "ha" * 3 # "hahaha"
length = len("東京") # 2
words = ["a", "b", "c"]
joined = ",".join(words) # "a,b,c"(多数の連結に最適)
Pythonイミュータブルの重要性と扱い方(深掘り)
文字列はイミュータブルなので「インデックスで書き換える」ことはできません。代わりにスライスや置換で新しい文字列を作ります。これにより、意図しない副作用が起きず、並行処理や再利用で安全性が増します。
s = "Python"
# s[0] = "J" # これはエラー
t = "J" + s[1:] # "Jython"(新しい文字列を作る)
u = s.replace("Py", "My") # "Mython"
Pythonこの「不変」は文字列操作の設計をシンプルに保つ基盤です。
文字列メソッドの要点
大文字・小文字変換とトリム
文字の大小変換は upper(), lower(), title(), capitalize() を使い、国際対応の強力な小文字化には casefold() が有効です。前後の空白は strip()/lstrip()/rstrip() で除去します。
s = " Hello World "
print(s.strip()) # "Hello World"
print(s.upper()) # "HELLO WORLD"
print("Straße".lower()) # "straße"
print("Straße".casefold()) # "strasse"(より強力)
Pythoncasefold は多言語対応で正規化に役立つ場面があります。
検索・分割・置換
部分一致や位置取得は in, find(), startswith(), endswith() を使います。分割は split()/rsplit()、置換は replace() を使います。
s = "apple,banana,orange"
print("banana" in s) # True
print(s.find("banana")) # 6(見つからなければ -1)
print(s.startswith("app")) # True
print(s.endswith("nge")) # True
print(s.split(",")) # ["apple","banana","orange"]
print(s.replace("banana", "grape")) # "apple,grape,orange"
Pythonこれらの基本操作は、入力前処理やログ整形で頻出です。
フォーマット(f文字列と format)
表示整形は f文字列が読みやすく高速で、複雑な指定や古いコード互換では format() も便利です。型変換は str() を併用します。
name, score = "太郎", 92.345
print(f"{name}さんの点数は {score:.1f} 点") # 小数1桁
print("合計: {0:,} 円".format(1234567)) # カンマ区切り
print("値: " + str(123)) # 数値を文字列へ
Pythonstr() は画面表示や結合時に「文字列化」するための組み込み関数で、あらゆる型を文字列に変換できます。
Unicode とエンコードの基礎(深掘り)
Pythonの文字列はUnicodeで、世界中の文字を同一の抽象コードで扱います。ファイル入出力や外部通信では、UTF-8などの「バイト列へのエンコード/デコード」を意識すると安全です。
s = "東京"
b = s.encode("utf-8") # バイト列へ
t = b.decode("utf-8") # 文字列へ戻す
Pythonこの理解があると、文字化けや外部APIとのやり取りで困りにくくなります。
例題で身につける
例題1:ユーザー入力の前処理
ユーザー入力は前後空白や大小文字の揺れがある前提で正規化します。casefold と strip の組み合わせが強力です。
raw = " PyThOn "
norm = raw.strip().casefold() # "python"
print(norm == "python") # True
Python例題2:CSV行の分割と再結合
split と join でテキストデータを分解・加工・再構成します。大量結合は join を使うのが鉄則です。
line = "apple,banana,orange"
parts = line.split(",")
parts[1] = "grape"
new_line = ",".join(parts)
print(new_line) # "apple,grape,orange"
Python例題3:テンプレート文字列でレシート出力
f文字列で読みやすく保ち、フォーマット指定で桁や小数点を整えます。
item, price, qty = "Coffee", 350, 2
total = price * qty
receipt = f"""
--- Receipt ---
Item: {item}
Price: ¥{price:,}
Qty: {qty}
Total: ¥{total:,}
"""
print(receipt.strip())
Python例題4:安全な部分一致と置換
find の結果で存在を確認し、replace で期待通りに置換します。見つからない場合のハンドリングも明示的に。
text = "Order: #A123, Status: pending"
pos = text.find("pending")
if pos != -1:
text = text.replace("pending", "shipped")
print(text)
Pythonまとめ
str は「不変で安全」なテキストの器で、クォートの使い分け、基本メソッド、f文字列、Unicodeとエンコードを押さえると日常の文字列処理が一気に安定します。結合の性能には join、国際対応には casefold、表示にはフォーマット指定と str() を使う——この軸を習慣化すると、入力前処理からログ整形まで迷わず書けます。
