Pythonで文字列をリストに分割する:split()メソッドの使い方と空白処理の注意点

CSVデータの解析や、文章を単語ごとに分解する処理など、1つの長い文字列を特定のルールに従って複数のパーツに分割したい場面は頻繁にあります。

Pythonの文字列型には、このための標準メソッドとして split() が用意されています。

この記事では、split() の基本的な使い方と、特によく使われる「空白での分割」における重要な挙動の違いについて解説します。

目次

1. 区切り文字を指定して分割する

split() メソッドの第1引数に「区切り文字(デリミタ)」を指定すると、その文字が出現する場所で文字列が分割され、リスト(list) として返されます。

構文:

リスト = 文字列.split(区切り文字)

具体的な使用例:カンマ区切りデータ (CSV)

# カンマで区切られたデータ
csv_line = "apple,banana,orange,grape"

# "," を区切り文字として指定
fruit_list = csv_line.split(",")

print(f"元の文字列: {csv_line}")
print(f"分割後のリスト: {fruit_list}")

実行結果:

元の文字列: apple,banana,orange,grape
分割後のリスト: ['apple', 'banana', 'orange', 'grape']

2. 空白で分割する(引数の有無による違い)

文章を単語に分ける場合など、「空白(スペース)」で分割したいケースは多いですが、split() に引数を渡すかどうかで挙動が大きく異なります。

引数なし split():空白をよしなに処理(推奨)

引数を省略すると、スペース、タブ、改行などのあらゆる空白文字を区切りとして扱います。さらに、連続する空白はまとめて1つの区切りとみなされ、前後の余計な空白も無視されます。通常はこちらを使用します。

text = "  Python   is   fun.  "

# 引数なし(空白を賢く処理)
words = text.split()

print(f"引数なし: {words}")

実行結果:

引数なし: ['Python', 'is', 'fun.']

引数あり split(" "):厳密にスペース1つで分割

明示的に半角スペース " " を指定すると、「スペース1個につき1回分割」します。そのため、スペースが連続していると、間に空文字列 '' が生成されてしまいます。

text = "  Python   is   fun.  "

# " " を明示的に指定
words_strict = text.split(" ")

print(f"引数あり: {words_strict}")

実行結果:

引数あり: ['', '', 'Python', '', '', 'is', '', '', 'fun.', '', '']

このように、空文字が大量に含まれたリストになってしまうため、単純な単語分割には不向きです。

3. 分割回数を制限する (maxsplit)

第2引数に数値(maxsplit)を指定すると、分割する回数を制限できます。残りの部分は分割されずに1つの要素としてリストの最後に格納されます。

data = "Key:Value:Detail:Info"

# 最初の1回だけ分割する(キーと値に分ける時などに便利)
result = data.split(":", 1)

print(result)

実行結果:

['Key', 'Value:Detail:Info']

まとめ

  • str.split(sep): 指定した sep で文字列を分割し、リストを返します。
  • str.split() (引数なし): 連続する空白を無視して単語ごとに分割します。文章の解析にはこれが最適です。
  • str.split(" "): スペース1つごとに厳密に分割するため、連続スペースがあると空文字が含まれます。
  • maxsplit: 分割回数を制限したい場合に使用します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次