Python文字列分割の基礎|split関数でテキスト処理

Pythonのsplit関数を使った文字列分割の基本から応用まで初心者向けに解説。区切り文字の指定、分割回数の制限、実践的なテキスト処理方法を具体例付きで紹介

Learning Next 運営
19 分で読めます

みなさん、文字列を分割したいと思ったことはありませんか?

「CSVファイルを読み込みたいけど、どうやって分けるの?」 「split関数って何?どうやって使うの?」 「テキストデータの処理がうまくいかない...」

こんな疑問を持っている方も多いのではないでしょうか。

でも大丈夫です! この記事では、Pythonのsplit関数について、基本から実践的な使い方まで、初心者の方でもわかりやすく解説します。

split関数をマスターすれば、テキスト処理がとても楽になりますよ!

split関数って何?

split関数とは、文字列を指定した区切り文字で分割して、リストにしてくれるPythonの便利な機能です。

文字列分割が必要な理由

プログラミングでは、ひとつの文字列の中に複数の情報が入っていることがよくあります。 例えば、「りんご,バナナ,オレンジ」のような文字列を、個別の果物名として扱いたい場面がありますよね。

# このような文字列があるとします
fruits = "りんご,バナナ,オレンジ"
print(fruits) # りんご,バナナ,オレンジ
# split関数で分割してみましょう
fruit_list = fruits.split(",")
print(fruit_list) # ['りんご', 'バナナ', 'オレンジ']

文字列がリストに変わって、個別の要素として扱えるようになりました。 これがsplit関数の力なんです。

split関数の基本的な使い方

split関数の使い方はとてもシンプルです。

# 基本的な使い方
text = "Hello World Python"
result = text.split(" ")
print(result) # ['Hello', 'World', 'Python']
# 区切り文字を変えてみる
data = "名前|年齢|職業"
result2 = data.split("|")
print(result2) # ['名前', '年齢', '職業']

**文字列.split(区切り文字)**という形で使います。

とても簡単ですよね!

基本的な使い方をやってみよう

split関数でいろんな文字列を分割してみましょう。

スペースで分割する

まずは、スペースで区切る基本的な使い方から始めます。

# 普通の文章を分割
sentence = "Python は 楽しい"
words = sentence.split(" ")
print(words) # ['Python', 'は', '楽しい']
# 英語の文章も分割できます
english = "I love programming"
words2 = english.split(" ")
print(words2) # ['I', 'love', 'programming']

スペースで区切ることで、文章を単語ごとに分けることができました。

区切り文字を省略してみる

split関数では、区切り文字を省略することもできます。

# 区切り文字を省略(自動でスペースで分割)
text = "Hello world Python"
result = text.split()
print(result) # ['Hello', 'world', 'Python']
# タブや改行があっても大丈夫
messy_text = "データ1 データ2 データ3
データ4"
clean_result = messy_text.split()
print(clean_result) # ['データ1', 'データ2', 'データ3', 'データ4']

区切り文字を省略すると、スペースやタブ、改行など、すべての空白文字で分割してくれます。 余分な空白も自動で取り除いてくれるので、とても便利ですね。

いろんな区切り文字を試そう

split関数では、どんな文字でも区切り文字として使えます。

# カンマで分割
csv_data = "田中,25,エンジニア"
info = csv_data.split(",")
print(info) # ['田中', '25', 'エンジニア']
# コロンで分割
time_data = "10:30:45"
time_parts = time_data.split(":")
print(time_parts) # ['10', '30', '45']
# ハイフンで分割
date_data = "2024-01-15"
date_parts = date_data.split("-")
print(date_parts) # ['2024', '01', '15']

データの形式に合わせて、適切な区切り文字を選べます。

複数文字でも区切れます

split関数では、一文字だけでなく、複数の文字でも区切ることができます。

複数文字の区切り文字

# 複数文字で区切る
text = "データ1::データ2::データ3"
result = text.split("::")
print(result) # ['データ1', 'データ2', 'データ3']
# スペース付きカンマで区切る
sentence = "りんご, バナナ, オレンジ"
fruits = sentence.split(", ")
print(fruits) # ['りんご', 'バナナ', 'オレンジ']

「::」や「, 」のような複数文字も区切り文字として使えます。

HTMLタグで分割

ウェブページの内容を処理する時にも便利です。

# HTMLタグで分割
html = "<div>内容1</div><div>内容2</div><div>内容3</div>"
parts = html.split("</div>")
print(parts) # ['<div>内容1', '<div>内容2', '<div>内容3', '']
# タグを取り除いて内容だけ取得
contents = []
for part in parts:
if part.startswith("<div>"):
content = part.replace("<div>", "")
contents.append(content)
print(contents) # ['内容1', '内容2', '内容3']

HTMLタグも区切り文字として使えるので、ウェブデータの処理もできます。

分割回数を制限しよう

split関数では、何回分割するかを制限することもできます。

maxsplitパラメータを使う

# 最大2回まで分割
text = "a,b,c,d,e"
result = text.split(",", 2)
print(result) # ['a', 'b', 'c,d,e']
# 最初の1回だけ分割
email = "user@example.com"
parts = email.split("@", 1)
print(f"ユーザー名: {parts[0]}") # ユーザー名: user
print(f"ドメイン: {parts[1]}") # ドメイン: example.com

**split(区切り文字, 回数)**という形で、分割回数を制限できます。

指定した回数まで分割して、残りは最後の要素にまとめられます。

ログファイルの処理に便利

ログファイルの解析でよく使われるテクニックです。

# ログ行の解析
log_line = "2024-01-01 10:30:45 INFO アプリケーションが開始されました"
parts = log_line.split(" ", 3)
date = parts[0] # 2024-01-01
time = parts[1] # 10:30:45
level = parts[2] # INFO
message = parts[3] # アプリケーションが開始されました
print(f"日付: {date}")
print(f"時刻: {time}")
print(f"レベル: {level}")
print(f"メッセージ: {message}")

メッセージ部分にスペースが含まれていても、きちんと処理できます。

右から分割するrsplit関数

split関数には、右側から分割する「rsplit関数」もあります。

rsplitの使い方

# 普通のsplitと比較してみましょう
text = "a.b.c.d.e"
# 左から2回分割
left_split = text.split(".", 2)
print(f"左から: {left_split}") # 左から: ['a', 'b', 'c.d.e']
# 右から2回分割
right_split = text.rsplit(".", 2)
print(f"右から: {right_split}") # 右から: ['a.b.c', 'd', 'e']

rsplitを使うと、文字列の右端から指定回数だけ分割できます。

ファイルパスの処理に便利

ファイルパスを処理する時に、rsplitがとても便利です。

# ファイルパスからファイル名を取得
file_path = "/home/user/documents/report.txt"
parts = file_path.rsplit("/", 1)
directory = parts[0] # /home/user/documents
filename = parts[1] # report.txt
print(f"ディレクトリ: {directory}")
print(f"ファイル名: {filename}")
# 拡張子を分離
filename = "document.backup.txt"
name_parts = filename.rsplit(".", 1)
name = name_parts[0] # document.backup
extension = name_parts[1] # txt
print(f"ファイル名: {name}")
print(f"拡張子: {extension}")

ファイル名に複数のドット(.)があっても、最後の拡張子だけ取り出せます。

実際に使ってみよう

split関数を使った実用的な例をいくつか見てみましょう。

CSVデータの処理

CSVファイルのような表形式のデータを処理してみます。

# CSVデータ(複数行)
csv_data = """名前,年齢,職業
田中太郎,25,エンジニア
佐藤花子,30,デザイナー
山田次郎,35,営業"""
# 行ごとに分割
lines = csv_data.split("
")
print(f"総行数: {len(lines)}行")
# 最初の行はヘッダー
header = lines[0].split(",")
print(f"項目: {header}")
# データ行を処理
for i, line in enumerate(lines[1:], 1):
data = line.split(",")
person_info = dict(zip(header, data))
print(f"人{i}: {person_info}")

実行結果:

総行数: 4行 項目: ['名前', '年齢', '職業'] 人1: {'名前': '田中太郎', '年齢': '25', '職業': 'エンジニア'} 人2: {'名前': '佐藤花子', '年齢': '30', '職業': 'デザイナー'} 人3: {'名前': '山田次郎', '年齢': '35', '職業': '営業'}

CSVデータを辞書形式に変換して、扱いやすくなりました。

URL解析

ウェブのURLを解析してみましょう。

# URLの分解
url = "https://example.com/users/123?page=1&sort=name"
# プロトコルとその他を分離
protocol_rest = url.split("://", 1)
protocol = protocol_rest[0] # https
rest = protocol_rest[1] # example.com/users/123?page=1&sort=name
# ドメインとパスを分離
domain_path = rest.split("/", 1)
domain = domain_path[0] # example.com
path_query = domain_path[1] # users/123?page=1&sort=name
# パスとクエリを分離
if "?" in path_query:
path_parts = path_query.split("?", 1)
path = path_parts[0] # users/123
query = path_parts[1] # page=1&sort=name
print(f"プロトコル: {protocol}")
print(f"ドメイン: {domain}")
print(f"パス: {path}")
print(f"クエリ: {query}")

URLの各部分を分析して、必要な情報を取り出せました。

設定ファイルの読み込み

アプリの設定ファイルを読み込んでみましょう。

# 設定ファイルの内容
config_text = """
# データベース設定
DATABASE_URL=localhost:5432
USERNAME=admin
PASSWORD=secret123
# API設定
API_KEY=your-api-key
TIMEOUT=30
"""
# 設定を辞書に変換
settings = {}
for line in config_text.split("
"):
line = line.strip()
# コメント行と空行をスキップ
if line and not line.startswith("#"):
key, value = line.split("=", 1)
settings[key] = value
print("設定内容:")
for key, value in settings.items():
print(f" {key}: {value}")

実行結果:

設定内容: DATABASE_URL: localhost:5432 USERNAME: admin PASSWORD: secret123 API_KEY: your-api-key TIMEOUT: 30

設定ファイルの内容を辞書として読み込めました。

注意点とエラー対策

split関数を使う時の注意点を確認しましょう。

予想外の結果になる場合

split関数は、時々予想と違う結果を返すことがあります。

# 区切り文字が含まれない場合
text = "区切り文字なし"
result = text.split(",")
print(result) # ['区切り文字なし'](リストになる)
# 空文字列の場合
empty_text = ""
result2 = empty_text.split(",")
print(result2) # [''](空文字列が1つ入ったリスト)
# 区切り文字だけの場合
only_commas = ",,,"
result3 = only_commas.split(",")
print(result3) # ['', '', '', ''](空文字列が4つ)

予想と違う結果になることがあるので、注意が必要です。

安全な分割処理

エラーを防ぐための関数を作ってみましょう。

def safe_split(text, delimiter, max_parts=None):
"""安全な文字列分割関数"""
# 文字列でない場合は空リストを返す
if not isinstance(text, str):
return []
# 空文字列の場合も空リストを返す
if not text:
return []
# 分割を実行
if max_parts:
parts = text.split(delimiter, max_parts - 1)
else:
parts = text.split(delimiter)
# 空の要素を除去(必要に応じて)
cleaned_parts = [part.strip() for part in parts if part.strip()]
return cleaned_parts
# 使ってみましょう
test_data = "名前, , 年齢, 職業, "
result = safe_split(test_data, ",")
print(result) # ['名前', '年齢', '職業']

この関数を使えば、より安全にデータを処理できます。

None値のチェック

データが None の場合もチェックしましょう。

def process_data(data):
"""データ処理関数"""
if data is None:
print("データがありません")
return []
if not data.strip():
print("空のデータです")
return []
# データを分割
parts = data.split(",")
cleaned_parts = [part.strip() for part in parts]
return cleaned_parts
# テストしてみる
print(process_data(None)) # データがありません → []
print(process_data("")) # 空のデータです → []
print(process_data("a,b,c")) # ['a', 'b', 'c']

エラーチェックを入れることで、安全にプログラムを動かせます。

まとめ

Pythonのsplit関数について、基本から実践的な使い方まで詳しく解説しました。

今日覚えてほしいポイント

  • split関数は、文字列を指定した区切り文字で分割してリストにする
  • 区切り文字を省略すると、空白文字で自動分割
  • 分割回数を制限できる
  • rsplit関数で右側から分割
  • エラー対策も忘れずに

split関数が活躍する場面

  • CSVファイルの読み込み
  • ログファイルの解析
  • URL解析
  • 設定ファイルの処理
  • テキストデータの整形

split関数は、Pythonでテキスト処理をする時の基本的なツールです。 今日学んだことを活かして、実際にデータ処理プログラムを作ってみてくださいね。

まずは簡単な文字列の分割から始めて、徐々に複雑なデータ処理にも挑戦してみましょう! きっとプログラミングがもっと楽しくなりますよ。

関連記事