Python | 文法の基本:文字列型(str)

Python
スポンサーリンク

文字列型の概要(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"(より強力) 
Python

casefold は多言語対応で正規化に役立つ場面があります。

検索・分割・置換

部分一致や位置取得は 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))                        # 数値を文字列へ
Python

str() は画面表示や結合時に「文字列化」するための組み込み関数で、あらゆる型を文字列に変換できます。


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() を使う——この軸を習慣化すると、入力前処理からログ整形まで迷わず書けます。

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