Pythonの文字列(str)とは?
文字列(str)は、Pythonで文字や文章を扱うためのデータの種類です。
「こんにちは」「Hello」「123」のような、テキストはすべて文字列として扱われます。
文字列には「変更できない」という重要な特徴があります。これを「不変(immutable)」といいます。
難しく聞こえるかもしれませんが、簡単に言うと「一度作った文字列は、その内容を直接書き換えることができない」ということです。
例えば、こんなイメージです。
この「変更できない」という性質は、実は安全性のためにとても大切なことです。
意図しない文字列の変更を防止して、プログラムが予想外の動きをすることを防ぐことができるからです。
また、Pythonの文字列は、日本語、英語、絵文字など、世界中のあらゆる文字を問題なく扱えます。
これは「Unicode(ユニコード)」という仕組みのおかげです。難しいことは考えなくても、普通に日本語でプログラムを書けるということですね。
ちなみに、文字列はこういった場面でよく使われます。
- テキストファイルの読み書き
- ウェブデータの解析(スクレイピング)
- ユーザーインターフェースでのメッセージ表示
- ログファイルの分析
- 入力された情報の処理
Pythonには、文字列を便利に操作するための機能が数多く用意されているので、初心者でも簡単にテキスト処理ができます。
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
基本構文
Pythonでの文字列の作り方は、とても簡単です。
基本的には、シングルクォート(')かダブルクォート(")で文字を囲むだけです。
複数行の文字列を作りたいときは、三重引用符(''' または """)を使います。
このコードでは、以下のことをしています。
- animal = "イヌ" - ダブルクォートで文字列を作成
- animals = 'ネコとウサギとカメ' - シングルクォートでも文字列を作成可能
- multiline = """キツネ\nクマ\nタヌキ""" - 三重引用符で複数行の文字列を作成(\nは改行を表す)
- len(animals) - 文字列の長さ(文字数)を取得
- animal + "と" + animals[:2] - 文字列の連結と、スライス(部分取り出し)の組み合わせ
文字列の作成方法は状況に応じて使い分けます。通常は「'」または「"」を使い、文章内にクォートが含まれる場合は適切に選択する形です。
長い文章や複数行のテキストを扱う場合は、三重引用符が便利です。
実用例
Pythonの文字列処理は、実際のプログラミングで非常によく使われます。どのような場面でも中心的な役割を果たし、活躍すると言っても過言ではありません。
ということで、ここからは日常的な開発で役立つ実践的な文字列操作テクニックを紹介します。
これから紹介するスキルを身に付けると、テキストファイルの処理、データ分析、Webスクレイピングなど、様々な場面で活用できるようになります。
動物の名前を使った例を通して、文字列の基本操作から高度な処理まで幅広く学んでいきましょう。
基本的な文字列操作
文字列には、以下のような基本操作があります。
- 空白の削除
- 大文字・小文字変換
- 文字数のカウント
といった操作です。
このような操作は、データをきれいに整える(クリーニング)際に必須です。
出力結果:
動物リスト: イヌ、ネコ、ウサギ, 数: 3匹
このコードでは、以下のようなことをしています。
- strip() で前後の空白を削除
- upper() で大文字に変換(日本語には影響しません)
- count("、") で区切り文字の数を数え、+1することで動物の総数を計算
これらのメソッドは、ユーザー入力のデータを整形する、ファイルから読み込んだテキストをクリーニングするといった際によく使われます。
文字列の検索と置換
文字列内の特定のパターンを見つけたり置き換えたりする操作は、テキスト処理の基本です。
find()メソッドで特定の文字列の位置を探し、replace()メソッドで文字列を置き換えることができます。
出力結果:
'イヌ'の位置: 0, 置換後: イヌ(犬)は忠実な動物です。多くのイヌ(犬)は飼い主に従順です。
このコードの意味を見ていきましょう。
- find("イヌ") で最初に「イヌ」が現れる位置(インデックス)を見つけている
- replace("イヌ", "イヌ(犬)") ですべての「イヌ」を「イヌ(犬)」に置き換えている
ちなみに、find()メソッドは、対象の文字列が見つからない場合には「-1」を返します。
また、replace()メソッドは文字列内のすべての該当箇所を置換するので、データの一括変換に便利です。
このような機能は、テキストファイルの加工やレポートの自動生成、フォーマットの統一といったケースでよく使われます。
文字列の分割と結合
文字列を複数の部分に分割したり、複数の文字列を一つに結合したりする機能は、データ処理で頻繁に使われます。
split()メソッドで文字列を分割し、join()メソッドでリストの要素を結合します。
出力結果:
分割結果: ['イヌ', 'ネコ', 'ウサギ', 'キツネ', 'クマ'], 結合結果: イヌ & ネコ & ウサギ
このコードの意味を確認してみます。
- split(",") でカンマを区切り文字として文字列を分割し、リストを作成する
- animals[:3] で最初の3つの要素を取り出す
- " & ".join() でリストの要素を「 & 」でつなげて一つの文字列にする
CSVファイルの処理やデータの整形、テキストの再構成など、実務では非常によく使う操作です。
特に、ファイルから読み込んだデータを処理する際に重宝します。
ちなみに、
「print(f"分割結果〜)のfって何?」
と疑問に思った方は、次の項目でその疑問を解消しましょう。
文字列のフォーマット
文字列に変数や値を埋め込む方法は、いくつもあります。
ここでは、比較的新しい方法を紹介します。それがf文字列(f-strings)です。
f文字列を使えば、コード内の変数を直接文字列に挿入できます。
これにより、読みやすく見栄えの良い出力が簡単に作成できます。
出力結果:
f文字列: ネコは5歳で4.2kgです。
format法: ネコは5歳で4.2kgです。
このコードの意味を説明します。
- f"{animal}は{age}歳で{weight}kgです。"
- f文字列で変数を直接埋め込んでいます - "{0}は{1}歳で{2}kgです。".format()
- format()メソッドを使った別の方法です
f文字列は、Python 3.6以降で使えるようになった、新しく読みやすい方法です。波括弧{}の中に変数名を直接書けるので、コードが直感的になります。
このようなフォーマット機能は、レポートの生成、ログメッセージの作成、ユーザーへの通知など、きれいに整形された出力が必要な場面で活躍します。
文字列のスライシング
文字列の一部を取り出すスライシングは、テキスト処理でとても便利な機能です。
インデックスの範囲を指定することで、必要な部分だけを取り出すことができます。
出力結果:
全体: イヌネコウサギクマカバ, 最初の3文字: イヌネ, 最後の2文字: カバ
1つおきの動物: イネウギマバ
スライシングの基本的な書き方は下記です。
- [開始:終了] - 開始位置から終了位置の手前まで
- [:3] - 最初から3文字目まで(0, 1, 2番目)
- [-2:] - 最後から数えて2番目まで
- [::2] - 全体を2文字ごとに取得(ステップ指定)
負のインデックスは「後ろから数える」という意味で、-1が最後の文字、-2が最後から2番目の文字を指します。
この機能は、ファイル名の拡張子を取り出したり、日付文字列から年月日を分離したりする際によく使われます。
正規表現による操作
正規表現は、文字列の中から「特定のパターン」を見つけ出すための強力な道具です。
例えば、「数字だけ」「英文字だけ」「特定の形式のメールアドレス」といったパターンを探し出すことができます。
Pythonではreモジュールを使って正規表現を使います。
最初は少し難しく感じるかもしれませんが、パターンが分かれば実に便利なツールです。
出力結果:
抽出結果: [('イヌ', '5'), ('ネコ', '4'), ('ウサギ', '2'), ('クマ', '300')]
このコードでは、r"(\w+)は(\d+)kg" という「パターン」を決めています。
- \w+ は「文字」を探す記号(動物の名前部分)
- \d+ は「数字」を探す記号(体重の数値部分)
- () で囲むと、その部分を取り出す
- re.findall() は、文字列全体からパターンに合う部分をすべて見つける
このように、正規表現を使うと望んだ形式でデータを一度に抽出できます。
ログファイルの分析やウェブページからの情報抽出など、データを扱う際にとても便利です。
ちなみに、r"(\w+)は(\d+)kg"の「r」は「raw string(生文字列)」を意味します。
通常の文字列では、バックスラッシュ(\)はただの文字というよりも改行(\n)といった特別な役割を持つため、文字として認識させる必要があります。
つまり、r を付けることで
- バックスラッシュを特別扱いしない
- 正規表現パターンが書きやすくなる
- コードが読みやすくなる
というメリットがあります。
正規表現を使うときは、ほぼ必ず「r」を付けるので覚えておきましょう。
文字列とリストの変換
文字列とリストの相互変換は、テキストデータを扱うときの基本的な操作です。
split()で文字列をリストに分割し、join()でリストを文字列に結合します。
この変換は、テキストデータの整形や加工でよく使われる技術です。
出力結果:
元のリスト: ['イヌ', 'ネコ', 'ウサギ', 'キツネ']
変換後: ['イヌ科', 'ネコ科', 'ウサギ科', 'キツネ科']
結合結果: イヌ科, ネコ科, ウサギ科, キツネ科
このコードの意味を確認しましょう。
- split(",") でカンマを区切りとして文字列をリストに変換
- [animal + "科" for animal in animal_list] で、各要素に「科」を追加
- ", ".join() でリストの要素を「, 」(カンマとスペース)でつなげて文字列に戻す
CSVファイルの処理やデータの一括変換など、実務でよく使うパターンです。
文字列とリストを自由に行き来できると、データ処理の幅が大きく広がります。
文字エンコーディング処理
異なる言語やシステム間でテキストを扱う際には、文字エンコーディングについて理解することが重要です。
Pythonでは、encode()メソッドで文字列をバイト列に、decode()メソッドでバイト列を文字列に変換できます。
出力結果:
元の文字列: イヌネコウサギ
エンコード結果: b'\xe3\x82\xa4\xe3\x83\x8c\xe3\x83\x8d\xe3\x82\xb3\xe3\x82\xa6\xe3\x82\xb5\xe3\x82\xae'
デコード結果: イヌネコウサギ
このコードの意味を確認してみます。
- encode('utf-8') で文字列をUTF-8形式のバイト列に変換
- decode('utf-8') でバイト列を元の文字列に戻す
- バイト列は b'...' の形式で表示される
エンコーディングは、コンピュータが文字を理解するための「変換ルール」のようなものです。
私たちは「あ」「い」「う」といった文字を見ますが、コンピュータは内部的に数字(0と1の組み合わせ)しか理解できません。そのため、文字と数字を変換する必要があります。
特に日本語を扱うときは、この変換ルール(エンコーディング)が重要になります。
具体的には、以下のような場面です。
- ファイルを保存したり開いたりするとき(テキストファイルやCSVファイルなど)
- ウェブサイトでメッセージをやり取りするとき(フォームの送信や掲示板など)
- 他のシステムとデータを交換するとき(API連携やデータベース接続など)
適切なエンコーディング(通常はUTF-8)をしないと、文字化けが起こる原因になるのです。
Pythonでは、このような文字化けを防ぐための機能が用意されているので、国際化への対応といったケースで特にメリットがあります。
まとめ
Pythonの文字列(str)について、基本を中心に応用的な内容にまで踏み込んで学んできました。
まず、文字列は「変更できない(不変)」という特性があることを学びましたね。
一見不便に思えるこの機能は、プログラムが予想外の動きをしないための安全装置のようなものでした。
この記事で学んだ主な文字列操作を振り返ってみましょう。
- 文字列の作成と基本的な操作(長さ、連結、スライス)
- 検索と置換(特定の文字を見つけたり、置き換えたりする)
- 分割と結合(テキストを分けたり、くっつけたりする)
- フォーマット(見やすい形式で文字列を作る)
- 正規表現(パターンに合う文字列を探す高度な方法)
- エンコーディング(文字化けを防ぐための処理)
文字列に関する技術は、実際のプログラミングで頻繁に使われています。
- ファイルの内容を読み込んで加工できる
- ウェブサイトから情報を取得できる
- ユーザーが入力したデータを処理できる
- レポートやメッセージを自動生成できる
文字列をマスターすると、こんなことができるようになるのです。
この記事を参考に、実際に基本的な操作から始めて、徐々に高度な機能にも挑戦してみてください。