Pythonでデータを処理していると、「1つの長い文字列をいくつかに分けたい」という場面がよくあります。
CSVファイル、ユーザーが入力したデータ、ログファイルなど、あらゆる情報が「文字列」として入ってくるからです。
そこで大活躍するのが、Pythonの文字列メソッド「.split()」。この関数ひとつで、カンマ区切り・スペース区切り・いろいろな記号での分割まで、ほとんどの場面に対応できます。
この記事では、初心者にも分かりやすく.split()
の基本と応用を紹介し、間違いやすい落とし穴まで詳しく説明します!
.split()とは?文字列をリストに変える基本操作
.split()の基本的な書き方
基本の形
文字列.split(区切り文字)
- 区切り文字を指定して、その文字で文字列を分割します
- 結果はリストで返されます
基本例:スペース区切り
まずは一番簡単な例から見てみましょう。
コード例
sentence = "Python is easy"
words = sentence.split()
print(words)
結果
['Python', 'is', 'easy']
説明:スペースで区切られた文字列が、3つの要素を持つリストになりました。.split()
の中に何も書かない場合は、自動的にスペースで分割してくれます。
区切り文字を指定する例
今度は、カンマで区切られた文字列を分割してみましょう。
コード例
csv = "apple,banana,orange"
fruits = csv.split(",")
print(fruits)
結果
['apple', 'banana', 'orange']
説明:カンマ(,)を区切り文字として指定することで、カンマで分割されたリストができました。
いろいろな区切り文字の例
コード例
# セミコロンで区切る
data = "名前;年齢;住所"
parts = data.split(";")
print(parts) # ['名前', '年齢', '住所']
# ハイフンで区切る
phone = "090-1234-5678"
numbers = phone.split("-")
print(numbers) # ['090', '1234', '5678']
まとめ:.split()
は、文字列を分割してリスト化する基本的なメソッドです。次の章では、実際のデータ処理でよく使う応用例を見ていきましょう。
応用編:日付・ファイルパス・いろいろな文字列を簡単に処理
日付の分割
日付のデータを年、月、日に分けてみましょう。
コード例
date = "2025-05-31"
year, month, day = date.split("-")
print(f"年: {year}")
print(f"月: {month}")
print(f"日: {day}")
結果
年: 2025
月: 05
日: 31
説明:リストの要素を直接、別々の変数に代入することができます。これを「アンパック」と呼びます。
ファイルパスを分割
ファイルのパス(場所)を分割して、フォルダ名を取得してみましょう。
コード例
path = "/Users/sample/Desktop/file.txt"
parts = path.split("/")
print(parts)
結果
['', 'Users', 'sample', 'Desktop', 'file.txt']
注意点:先頭のスラッシュのため、最初の要素が空文字(”)になります。これは正常な動作です。
ファイル名だけを取得する例
path = "/Users/sample/Desktop/file.txt"
filename = path.split("/")[-1] # 最後の要素を取得
print(filename) # file.txt
タブ区切りや改行を分ける
特殊な文字でも分割できます。
コード例
# タブ区切り(\t)
line = "A\tB\tC"
print(line.split("\t")) # ['A', 'B', 'C']
# 改行区切り(\n)
multiline = "one\ntwo\nthree"
print(multiline.split("\n")) # ['one', 'two', 'three']
説明:
\t
はタブ文字\n
は改行文字- これらの特殊文字も区切り文字として使えます
複数の空白がある場合
コード例
text = " apple banana orange "
print(text.split())
結果
['apple', 'banana', 'orange']
説明:区切り文字を指定しない場合、連続する空白を1つの区切りとして扱い、余分な空白を自動的に取り除いてくれます。
まとめ:.split()
をうまく使えば、ほとんどのテキストデータを柔軟に加工できます。続いて、初心者がよく陥る.split()
の落とし穴と注意点を見ていきましょう。
.split()の落とし穴と注意点
空文字やスペースの扱いに注意!
.split()と.split(” “)の違い
コード例
text = " apple banana orange "
# 区切り文字を指定しない場合
print(text.split())
# 結果: ['apple', 'banana', 'orange']
# スペースを明示的に指定した場合
print(text.split(" "))
# 結果: ['', '', 'apple', '', 'banana', '', 'orange', '', '']
説明:
.split()
:連続する空白を整理してくれる.split(" ")
:空白1つ1つで分割するため、空文字がたくさんできる
分割回数を制限する
場合によっては、全部を分割したくないときがあります。
コード例
text = "name:age:gender:hobby"
# 普通に分割
all_parts = text.split(":")
print(all_parts) # ['name', 'age', 'gender', 'hobby']
# 最大1回だけ分割
name, rest = text.split(":", 1)
print(f"名前: {name}")
print(f"残り: {rest}")
結果
['name', 'age', 'gender', 'hobby']
名前: name
残り: age:gender:hobby
説明:.split(区切り文字, 分割回数)
として使えば、「最大何回だけ分割するか」を指定できます。
よくあるエラー:要素が足りない
エラーになる例
# これはエラーになります
try:
a, b = "onlyone".split(":")
except ValueError as e:
print(f"エラー: {e}")
結果
エラー: not enough values to unpack (expected 2, got 1)
説明:区切り文字が含まれていない場合、分割されずに元の文字列1つだけがリストに入ります。2つの変数で受け取ろうとするとエラーになります。
安全な書き方
text = "onlyone"
parts = text.split(":")
if len(parts) == 2:
a, b = parts
print(f"a: {a}, b: {b}")
else:
print("区切り文字が見つかりませんでした")
空文字列を分割した場合
コード例
empty = ""
print(empty.split(",")) # ['']
print(empty.split()) # []
説明:
- 区切り文字を指定した場合:空文字列1つのリスト
- 区切り文字を指定しない場合:空のリスト
まとめ:.split()
を使うときは、データに期待する区切り文字が本当に存在するかどうかを必ずチェックしましょう。
.split()とよく一緒に使う便利テクニック
リストの各要素を数値に変換
文字列で分割した数値を、実際の数値として扱いたい場合があります。
コード例
numbers_text = "1,2,3,4,5"
numbers_list = list(map(int, numbers_text.split(",")))
print(numbers_list) # [1, 2, 3, 4, 5]
print(type(numbers_list[0])) # <class 'int'>
説明:
map(int, ...)
:リストの各要素をint(整数)に変換list(...)
:mapオブジェクトをリストに変換
リスト内包表記との組み合わせ
もっと複雑な処理をしたい場合は、リスト内包表記を使います。
コード例
text = "apple,banana,orange"
# 各単語の文字数を計算
fruit_lengths = [len(fruit) for fruit in text.split(",")]
print(fruit_lengths) # [5, 6, 6]
# 各単語を大文字に変換
upper_fruits = [fruit.upper() for fruit in text.split(",")]
print(upper_fruits) # ['APPLE', 'BANANA', 'ORANGE']
.strip()との組み合わせで前後の空白を除去
データに余分な空白が含まれている場合の対処法です。
コード例
text = " apple , banana , orange "
# そのまま分割(空白が残る)
normal_split = text.split(",")
print(normal_split) # [' apple ', ' banana ', ' orange ']
# strip()で空白を除去
cleaned = [s.strip() for s in text.split(",")]
print(cleaned) # ['apple', 'banana', 'orange']
説明:.strip()
は文字列の前後の空白を取り除くメソッドです。
条件に合う要素だけを残す
コード例
data = "apple,,banana,,orange,,"
# 空文字列を除外
filtered = [item for item in data.split(",") if item]
print(filtered) # ['apple', 'banana', 'orange']
# 長さが5文字以上のものだけ
long_items = [item for item in data.split(",") if len(item) >= 5]
print(long_items) # ['apple', 'banana', 'orange']
実践的な使用例
CSVデータの処理
コード例
csv_line = "田中,28,東京都,エンジニア"
name, age, prefecture, job = csv_line.split(",")
print(f"名前: {name}")
print(f"年齢: {age}歳")
print(f"住所: {prefecture}")
print(f"職業: {job}")
ログファイルの解析
コード例
log_line = "2025-06-05 14:30:25 INFO ユーザーがログインしました"
parts = log_line.split(" ", 3) # 最大3回分割
date = parts[0]
time = parts[1]
level = parts[2]
message = parts[3]
print(f"日付: {date}")
print(f"時刻: {time}")
print(f"レベル: {level}")
print(f"メッセージ: {message}")
ファイル拡張子の取得
コード例
filename = "document.pdf"
name, extension = filename.split(".", 1)
print(f"ファイル名: {name}")
print(f"拡張子: {extension}")
まとめ:.split()
を他の関数と組み合わせると、より実用的で応用の利くコードが書けます。
まとめ:.split()はPython文字列処理の最強ツール!
重要なポイント
.split()
は文字列を特定の区切り文字でリストに分割できるメソッド- 区切り文字を指定しない場合は空白が自動で判定される
- 日付・CSV・ファイルパス・改行など、あらゆるデータ処理に応用可能
.split(区切り文字, 分割回数)
で柔軟な処理も可能- 他の関数(map、strip、intなど)と組み合わせてパワーアップできる
使い分けガイド
用途 | 書き方 | 例 |
---|---|---|
基本的な分割 | .split() | "a b c".split() |
特定文字で分割 | .split("文字") | "a,b,c".split(",") |
分割回数制限 | .split("文字", 回数) | "a:b:c".split(":", 1) |
数値に変換 | map(int, 文字列.split()) | map(int, "1 2 3".split()) |
空白除去 | [s.strip() for s in 文字列.split()] | リスト内包表記と組み合わせ |
注意すべきポイント
- 分割前にデータの形式を確認する
- 区切り文字が存在するかチェックする
- 空文字列や余分な空白に注意する
- 分割後の要素数を確認してからアンパックする
コメント