(1時間4,000円の伴走型ビデオチャット指導も受付中!)
Pythonでの文字列分割をマスターしよう:`str.split()` の基礎から応用まで
![]()
【Yuki】
Hirokiくん、こんばんは。夜も更けて、周りが静かになってきましたね...。わたし、こういう静かな時間にコードを書いたり、何かを調べたりするのが一番落ち着くんです。熱暴走の心配も少ないですし、集中できる気がします。
今日は、Pythonで文字列を扱うときにとてもよく使う str.split() メソッドについて、一緒に勉強していきましょう。プログラムを書いていると、「長い文章を単語ごとに分けたい」とか「カンマ区切りのデータをバラバラにしたい」という場面がよく出てくると思うんです。
![]()
【Hiroki】
Yukiさん、こんばんは!確かに、夜の方が静かで集中できるっていうのは、なんとなくわかる気がします。
文字列を分ける方法ですね。以前、ユーザーから入力された複数の数字をバラバラにしてリストに入れたいと思ったことがあったんですけど、どうすればいいか分からなくて困ったことがありました。str.split() を使えば、そういうことができるようになるんでしょうか?
![]()
【Yuki】
ええ、まさにその通りです。str.split() を使いこなせるようになると、データの加工がぐっと楽になりますよ。まずは一番シンプルな使い方から見ていきましょう。
1. str.split() の基本的な使い方
![]()
【Yuki】
もっとも基本的な使い方は、引数を何も指定せずに split() を呼び出す方法です。この場合、Pythonは 「空白文字(スペース、タブ、改行など)」 を区切り文字として認識して、文字列を分割してくれます。
text = "Python PHP Ruby JavaScript"
languages = text.split()
print(languages)
# 出力: ['Python', 'PHP', 'Ruby', 'JavaScript']
![]()
【Hiroki】
おお、すごくシンプルですね! split() を実行するだけで、単語がバラバラになって リスト(list) 形式で返ってくるんですね。
![]()
【Yuki】
そうなんです。返り値がリストになるという点は、とても大切なポイントですね。
ここで一つ、少しだけ注意が必要な挙動についてお話ししておきます。引数を指定しない場合、連続した空白は「ひとつの区切り」として扱われるんです。
text_with_spaces = "Python Java \t Go"
result = text_with_spaces.split()
print(result)
# 出力: ['Python', 'Java', 'Go']
![]()
【Hiroki】
あ、本当だ。スペースがいくつあっても、タブ(\t)が混ざっていても、綺麗に単語だけを抜き出してくれるんですね。これは便利そうです。
2. 区切り文字(セパレータ)を指定する
![]()
【Yuki】
そう言ってもらえると嬉しいです。でも、データによってはスペースではなく、カンマ(,)やスラッシュ(/)で区切られていることもありますよね。そんな時は、split() の第一引数に 区切りたい文字(sep) を指定します。
data = "apple,orange,banana,grape"
fruits = data.split(",")
print(fruits)
# 出力: ['apple', 'orange', 'banana', 'grape']
![]()
【Hiroki】
なるほど! split(",") と書けば、カンマを境目にしてくれるんですね。
...あ、でも Yukiさん、もしカンマの後にスペースが入っていたらどうなるんですか? 例えば "apple, orange, banana" みたいに。
![]()
【Yuki】
鋭いですね、Hirokiくん。その場合は、スペースも文字の一部としてリストに含まれてしまいます。
data = "apple, orange, banana"
fruits = data.split(",")
print(fruits)
# 出力: ['apple', ' orange', ' banana']
![]()
【Yuki】
このように、' orange' や ' banana' の前に半角スペースが残ってしまいます。これを解決するには、分割した後に各要素の空白を取り除く処理をするか、最初から split(", ") と指定する必要があります。データの形式に合わせて使い分けるのが良いと思います...。
![]()
【Hiroki】
「何で区切るか」を正確に指定しないといけない、ということですね。勉強になります。
3. 分割回数を制限する maxsplit
![]()
【Yuki】
次に紹介するのは、maxsplit というオプションです。これは「最大で何回分割するか」を指定するものです。
例えば、「最初の1つだけ切り出して、残りはそのままにしておきたい」という時に便利ですよ。
log_entry = "2024-05-20 10:00:00 Error: Connection failed"
# 最初の2つのスペースだけで分割したい場合
parts = log_entry.split(" ", 2)
print(parts)
# 出力: ['2024-05-20', '10:00:00', 'Error: Connection failed']
![]()
【Hiroki】
へぇー! 2回分だけ分割して、残りの "Error: Connection failed" はひとまとめのままなんですね。
これを使えば、複雑なメッセージの一部だけを抜き出したいときに、インデックス(添字)の管理が楽になりそうです。
![]()
【Yuki】
そうですね。特にログファイルのような、決まったフォーマットのデータを解析するときには重宝するはずです。ちなみに、この maxsplit を省略するか -1 を指定すると、可能な限りすべての箇所で分割されます。普段は意識しなくても大丈夫ですけど、知識の片隅に置いておいてくださいね。
4. 右側から分割する rsplit()
![]()
【Yuki】
split() は通常、文字列の左側から順番に探して分割していきますが、実は右側から分割してくれる rsplit() というメソッドもあるんです。
![]()
【Hiroki】
右側から...? 結果は同じにならないんですか?
![]()
【Yuki】
さっきの maxsplit と組み合わせたときに違いが出るんです。例えば、ファイルパスから「ファイル名」と「それ以外」に分けたい場合を考えてみてください。
file_path = "home/user/documents/report.pdf"
# 右側から1回だけ分割する
parts = file_path.rsplit("/", 1)
print(parts)
# 出力: ['home/user/documents', 'report.pdf']
![]()
【Hiroki】
あ!なるほど! split() で左からやっちゃうと、home と user/documents/report.pdf になっちゃいますけど、rsplit() なら一番後ろの / で分けてくれるから、ファイル名が簡単に取れるんですね。
![]()
【Yuki】
その通りです。用途に合わせて、左から分けるか右から分けるかを選べるようになると、さらにコードがスッキリすると思います。
5. 改行で分割する splitlines()
![]()
【Yuki】
もう一つ、文字列の分割で欠かせないのが splitlines() メソッドです。これはその名の通り、文字列を 「改行コード」 で分割してリストにしてくれます。
![]()
【Hiroki】
split("\n") と書くのとは違うんですか?
![]()
【Yuki】
とても良い質問です。実は、改行コードには \n(LF)だけでなく、Windowsで使われる \r\n(CRLF)など、いくつか種類があるんです。 splitlines() は、これら種類の異なる改行コードをすべて自動的に判別して、適切に分割してくれるんです。
multi_line_text = "Hello\nWorld\r\nPython"
lines = multi_line_text.splitlines()
print(lines)
# 出力: ['Hello', 'World', 'Python']
![]()
【Hiroki】
それはすごい! 自分で「これは \n かな? \r\n かな?」って悩まなくていいんですね。テキストファイルを読み込んで一行ずつ処理したいときは、これが一番良さそうです。
![]()
【Yuki】
はい、テキスト処理の基本として覚えておくと、きっと役に立つはずです。
6. 実践的な応用例:APIレスポンスの解析
![]()
【Hiroki】
だいぶ使い方がわかってきました。でも、これって実際の開発ではどういう風に使われることが多いんでしょうか?
![]()
【Yuki】
そうですね...。例えば、最近のAI技術を使った開発でも、文字列の操作は欠かせません。
最新のAIモデル、例えば Google の gemini-1.5-flash などを使って、何か情報を取得したとします。API(google-genai ライブラリなど)を介して取得したデータが、カンマ区切りの文字列や特定のルールに則ったテキストで返ってくることがあるかもしれません。
例えば、AIに「おすすめのプログラミング言語3つをカンマ区切りで教えて」と頼んで、"Python,JavaScript,Go" という文字列が返ってきた場合を想像してみてください。
# APIから返ってきたという想定の文字列
ai_response = "Python,JavaScript,Go"
# リストに変換して、一つずつ処理する
recommended_languages = ai_response.split(",")
for lang in recommended_languages:
print(f"僕のおすすめは {lang} です!")
![]()
【Hiroki】
なるほど! AIとのやり取りも、最終的には文字列でのやり取りが多いから、それをプログラムで扱いやすいリスト形式にするために split() が活躍するんですね。
![]()
【Yuki】
その通りです。AIへの指示(プロンプト)を工夫して、特定の区切り文字で出力させるようにすれば、プログラム側での解析がとてもスムーズになりますよ。
7. 知っておくと便利な Tips と注意点
![]()
【Yuki】
最後に、いくつか細かいけれど重要なポイントを補足しておきますね。
空の文字列を分割すると?
![]()
【Yuki】
もし、空の文字列 "" に対して split() を使うと、どうなると思いますか?
![]()
【Hiroki】
えーっと...エラーになっちゃうとか?
![]()
【Yuki】
実は、空のリストが返ってくるんです。
empty_str = ""
print(empty_str.split(","))
# 出力: [''] (空文字が1つ入ったリスト)
print(empty_str.split())
# 出力: [] (完全に空のリスト)
![]()
【Yuki】
引数を指定した場合としない場合で結果が少し違うので注意が必要ですが、エラーでプログラムが止まることはありません。少し意外かもしれませんね。
Noneを渡す
![]()
【Yuki】
split(None) と書くと、引数を何も指定しない時と同じ動作になります。あまり使う機会はないかもしれませんが、関数のデフォルト引数などで見かけることがあるかもしれません。
逆の操作:join()
![]()
【Yuki】
split() でバラバラにしたリストを、もう一度一つの文字列に繋ぎ合わせたいときは join() メソッドを使います。これは split() の対になる操作なので、セットで覚えておくのがおすすめです。
words = ['Python', 'is', 'fun']
sentence = " ".join(words)
print(sentence)
# 出力: "Python is fun"
![]()
【Hiroki】
" ".join(words)...。書き方がちょっと独特ですね。リストの方のメソッドじゃなくて、繋ぎたい文字(この場合はスペース)のメソッドなんですね。
![]()
【Yuki】
そうなんです、そこが少し間違いやすいポイントです。「この文字 で 繋ぐ」というイメージを持つと覚えやすいかもしれません。
まとめ
![]()
【Yuki】
さて、今日は str.split() について詳しく見てきましたが、いかがでしたか?
![]()
【Hiroki】
はい! ただ文字列を分けるだけじゃなくて、区切り文字の指定や回数制限、右側からの分割など、色々な工夫ができることがわかりました。
今までなんとなく使っていた部分もありましたけど、仕組みをしっかり理解できたので、これからは自信を持って使えそうです!
![]()
【Yuki】
それは良かったです。文字列操作は、プログラミングの基礎中の基礎ですが、だからこそ奥が深くて面白い分野でもあります。困ったときは、いつでも公式ドキュメントを確認してみてくださいね。
Python公式ドキュメント:組み込み型 - str.split
![]()
【Yuki】
もし、他にも分からないことがあれば、いつでも聞いてください。わたし、Hirokiくんのように熱心に学ぼうとする人を支えるのは、とても嬉しいんです...。あ、でも、あまり無理はしないでくださいね。
![]()
【Hiroki】
ありがとうございます、Yukiさん! また分からないことがあったら教えてください。今日は本当にありがとうございました!
![]()
【Yuki】
どういたしまして。それじゃあ、今日はこの辺にしましょうか。おやすみなさい、Hirokiくん。
![]()
【Hiroki】
おやすみなさい!
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

