Pythonでテキストデータを扱っていると、「文章を単語ごとに分けたい」「CSVデータをリストに変換したい」といった場面に遭遇します。
そんな時に便利なのが、 文字列操作のメソッドsplit()です 。単純そうに見えますが、「空白で区切ると空のデータが入ってしまう」「回数指定のやり方がわからない」といった細かい仕様でつまずくことも。
そこで、本記事では、Pythonの split() メソッドの基本的な使い方から、現場で役立つ実践的なテクニックまでを丁寧に解説します。
split()を使いこなして、色々なパターンの文字列分割を自在に操れるように頑張りましょう!
Pythonのsplit()とは?基本の使い方
split() は、
指定した区切り文字(デリミタ)で文字列を分割し、
結果を「リスト(List)」として返す
メソッドです。基本的な構文は以下の通り。
文字列.split(sep, maxsplit)
- sep(省略可): 区切り文字を指定します。省略すると「空白(スペース、タブ、改行)」で分割されます。
- maxsplit(省略可): 分割する回数を指定します。省略すると、すべて分割されます。
まずは、一番シンプルな例を見てみましょう。
text = "Hello World Python"
result = text.split()
print(result)
# 出力結果: ['Hello', 'World', 'Python']この例のように、1つの長い文字列が、単語ごとのリスト(配列のようなもの)に変換されました。ここから、具体的な活用パターンを解説します。
【例1】空白(スペース・タブ・改行)で分割する
最も頻繁に使うのが、引数を何も指定しない(sep を省略する) パターンです。
強力な「空白まとめ」機能
引数を省略した場合、pythonは以下の挙動をとります。
- あらゆる空白文字に対応
半角スペースだけでなく、タブ(\t)や改行(\n)、全角スペースもすべて「区切り文字」として扱います。
- 連続する空白を1つとみなす
空白が2つ以上連続していても、それらをまとめて1つの区切りとして処理します。
# スペースが連続していたり、タブ(\t)が混ざっている汚いデータ
dirty_text = "Python is \t very useful"
# 引数なしでsplitすると...
clean_list = dirty_text.split()
print(clean_list)
# 出力結果: ['Python', 'is', 'very', 'useful']もしこれを他の言語のように単純にスペースで区切ると、リストの中に大量の空文字が含まれてしまいますが、Pythonの split() は自動できれいにしてくれます。
【例2】特定の文字(カンマやハイフン)で区切る
CSVデータやURL、日付データなどを扱う場合は、区切り文字を明示的に指定します。
# カンマ区切りのデータ
csv_data = "apple,banana,orange"
fruits = csv_data.split(',') #区切り文字「,」を指定してsplit
print(fruits)
# 出力結果: ['apple', 'banana', 'orange']
【注意】引数指定時の「空文字」問題
注意点として、split(',') のように区切り文字を指定した場合、連続する区切り文字の間には「空の文字列('')」があるとみなされます。
# バナナとオレンジの間にカンマが2つある
csv_data = "apple,banana,,orange"
result = csv_data.split(',')
print(result)
# 出力結果: ['apple', 'banana', '', 'orange']
# 空文字 '' が生成されてしまう引数なしの時とは挙動が異なるため、データ分析などの際は注意が必要です。
【例3】分割回数を指定する(maxsplit)
「先頭の項目だけ切り出したい」という場合に便利なのが、第2引数の maxsplit です。
例えば、「キー=値=補足情報」のような文字列から、最初のキーだけを取り出したい場合に使います。
config = "username=admin=root"
# 最初の1回だけ分割する(=2つの要素になる)
result = config.split('=', 1)
print(result)
# 出力結果: ['username', 'admin=root']maxsplit=1 と指定することで、最初の = で分割した後は、残りの文字列には手を付けずにそのまま残します。
右側から分割する rsplit() との違い
sprit()と似たメソッドとして、rsplit() があります。通常の split() は左(先頭)から分割しますが、rsplit() は右(末尾)から分割処理を行います。
引数 maxsplit を指定しない場合、結果は split() と全く同じになりますが、回数指定をした時に真価を発揮します。
活用例:ファイルパスからファイル名を取り出す
path = "user/local/bin/python_test.py"
# 右側から1回だけ分割する
dir_name, file_name = path.rsplit('/', 1)
print(f"ディレクトリ: {dir_name}")
print(f"ファイル名: {file_name}")
# 出力結果:
# ディレクトリ: user/local/bin
# ファイル名: python_test.py
【応用】複数の区切り文字で分割する(re.split)
実務でデータを扱っていると、「カンマとセミコロンが混ざっている」ような不規則なデータに出会うことがあります。標準の split() は1種類の文字しか指定できません。
そんな時は、正規表現モジュール re を使います。
import re
text = "apple,banana;orange|grape"
# カンマ(,) セミコロン(;) 縦線(|) のいずれかで分割
result = re.split('[;,|]', text)
print(result)
# 出力結果: ['apple', 'banana', 'orange', 'grape']
これはデータクレンジング(データの掃除)で非常によく使うテクニックなので、覚えておくと便利です。
改行コード専用の splitlines()
テキストファイルを読み込んで、1行ずつリストにしたい場合は、split('\n') ではなく、専用の splitlines() メソッドを使うのが定石です。
text = """Line 1
Line 2
Line 3"""
lines = text.splitlines()
print(lines)
# 出力結果: ['Line 1', 'Line 2', 'Line 3']なぜ splitlines() が良いのか?
OSによって改行コードは異なります(Windowsは \r\n、Mac/Linuxは \n)。splitlines() はこれらを自動判別して適切に分割してくれるため、バグを防ぐことができます。
よくあるエラーと対処法(FAQ)
① 分割結果に空文字 '' が含まれて困る
特定の文字で分割した際に発生する空文字を除去したい場合は、リスト内包表記を使います。
data = "a,,b,c"
raw_list = data.split(',')
print(raw_list)
# ['a', '', 'b', 'c'] になってしまう
# 空文字を除去するテクニック
clean_list = [x for x in raw_list if x != '']
print(clean_list)
# 結果: ['a', 'b', 'c']② 分割したリストを文字列に戻したい
split の逆操作を行いたい場合は、join() メソッドを使います。
words = ['Hello', 'World']
sentence = ' '.join(words) # 空白で結合
print(sentence)
# 結果: "Hello World"③ AttributeError: ‘list’ object has no attribute ‘split’とエラーが出る
これは「すでにリストになっているもの」に対して split() を使おうとした時に出るエラーです。変の中身が文字列型(str)であることを確認しましょう。
まとめ
Pythonの split() は、データ処理の基本中の基本です。
- 基本: 引数なし
split()で、空白・改行・タブをきれいに分割。 - 指定:
split(',')でCSVなどを分割(空文字に注意)。 - 回数:
maxsplitで分割回数を制限。 - 応用: 複雑な区切り文字には
re.split()。
これらを使い分けることで、テキスト処理の効率は格段に上がります。まずは手元のエディタで、空白区切りの挙動から試してみてください。
