YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

Python 文字列の分割方法まとめ|図解付で分かりやすく解説

文字列の分割は、文字列の解析やデータ処理などで頻繁に行われる作業の一つですね。

Pythonには、文字列を簡単に分割するための機能が豊富に用意されています。

しかし、実際に文字列の分割を行おうとすると、次のような課題に直面することも…。

  • 特定の文字でテキストを分割する方法は?
  • テキストを行ごとに分割する方法は?
  • 正規表現を使って複雑な分割処理を行いたい!

この記事では、Pythonの文字列分割について図解付きでわかりやすく解説していきます。

文字列分割方法まとめ

文字分割の基本の流れは次の通りです。

  1. 分割したい文字列を準備|text = "分割したい文字列"
  2. 分割用のメソッドを実行|text.分割用メソッド()

分割用のメソッドには、区切り文字で分割するものや、改行で分割するものなどがあります。

これらの方法に加えて、正規表現のreモジュールを使用した分割方法もあります。

Pythonにおける主な文字列分割方法を以下の表にまとめているので、一覧を確認してみましょう。

メソッド名・方法名 説明
split() 指定した区切り文字で文字列を分割。
→ 分割された文字列を[リスト]で返す。
※デフォルトでは空白文字が区切り文字
rsplit() split()と同様だが、文字列を右端から分割。
分割回数を指定した際にsplit()と挙動の違いがでる。
splitlines() 改行文字を区切り文字として、文字列を複数の行に分割。
→ 複数行のテキストを行ごとに分割するときに便利
partition() 指定した区切り文字を境に文字列を前後に分割。
→ 区切り文字を含めた3つの文字列を(タプル)で返す。
rpartition() partition()と同様だが、文字列を右端から分割。
正規表現で分割 reモジュールのsplit()を使うと正規表現を指定して文字列を分割できる。

split()splitlines()は、最も基本的な文字列分割メソッドです。

正規表現を使えば、柔軟に分割処理ができるので、こちらも抑えておきたい技術の一つですね。

以下では、これらの文字列分割方法について、サンプルコード付きで詳しく解説していきます。

区切り文字で分割|split()

最も基本的な文字列の分割方法です。基本挙動は次の通りです。

  • 指定した区切り文字で文字列を分割
    • デフォルト:空白文字(スペース、タブ\t、改行\n,\r\n)で分割
  • 分割結果を[リスト]で返す

まずは簡単な文字列で実行例を確認してみましょう。

# デフォルト設定(空白文字)で分割
text = "ABC DEF\tGEH\nIJK"  # \t:タブ, \n:改行
text.split()
# ['ABC', 'DEF', 'GEH', 'IJK']

# 区切り文字を指定して分割
text = "ABC, DEF, GEH, IJK"
text.split(",")
# ['ABC', ' DEF', ' GEH', ' IJK']

簡単に文字列が分割できましたね。

結果はリストで返されるので、必要な要素を抽出するなどして使用していきましょう。

分割回数の指定

デフォルトでは、文字列内にある全ての区切り文字で分割が行われます。

引数maxsplitで、区切り文字で何回まで分割するかを指定することができます。

  • maxsplit = 最大の分割回数

指定した回数以上は分割されなくなります。1回だけ分割したいときに便利ですね。

text = "ABC DEF GEH IJK"

text.split(maxsplit=1)
# ['ABC', 'DEF GEH IJK']

text.split(maxsplit=2)
# ['ABC', 'DEF', 'GEH IJK']

rsplit()で右側から分割

split()の派生形として、rsplit()があります。

これは、文字列の右側から文字列の分割を行うメソッドです。

回数を指定せずに文字列を分割するだけの場合は、split()rsplit()で違いはありません。

分割回数を指定すると、split()rsplit()で挙動の違いが出ます。

text = "ABC DEF GEH IJK"

text.split(maxsplit=1)
# ['ABC', 'DEF GEH IJK']

text.rsplit(maxsplit=1)
# ['ABC DEF GEH', 'IJK']

次のように使い分けをするといいですね。

  • 左側からn回分割したいとき:split(maxsplit=n)
  • 右側からn回分割したいとき:rsplit(maxsplit=n)

maxsplitを指定しないと、全ての区切り文字で分割されるので、両者で同じ結果になってしまいます。

行ごとに分割|splitlines()

複数行のテキストを行ごとに分割する場合は、splitlines()を使うと便利です。

  • splitlines() ⇒ 文字列を改行文字('\n'または'\r\n')で分割

デフォルトでは、分割後に改行文字は残りません。

text = """一行目の文章です。
二行目です。
三行目。"""

# 改行文字を表示すると次のような状態
# '一行目の文章です。\n二行目です。\n三行目。'

# splitlines()で分割
text.splitlines()
# ['一行目の文章です。', '二行目です。', '三行目。']

改行文字を残しておきたい場合には、引数keepends=Trueを指定します。

text = """一行目の文章です。
二行目です。
三行目。"""

# splitlines()で分割(デフォルトでは改行文字は残らない)
text.splitlines()
# ['一行目の文章です。', '二行目です。', '三行目。']

# keepends=Trueで改行文字を残す
text.splitlines(keepends=True)
# ['一行目の文章です。\n', '二行目です。\n', '三行目。']

改行文字が分割後のテキスト内に残っていますね。

splitlines()は、テキストファイルの読み込み後に使用することが多いですね。

テキストファイルの読み込みについては、次の記事を参考にしてください

≫Python テキストファイル読み込み・テキスト処理まとめ
Pythonでは簡単にテキストファイルを読み込むことができます。しかし、実際にテキストファイルを読み込もうとすると、次のような問題に直面することも…①ファイルの読み込みってどうやるんだっけ?②エンコーディングのエラーがでた!③テキストの出力方法にも種類があって、使い分けがよくわからない!そこで、この記事ではPythonでのテキストファイル読み込み、よく使うテキスト処理について、図解付きで徹底解説しています!
www.yutaka-note.com/entry/bf_openfile
 

partition()メソッドでの分割

partition()メソッドは、指定した区切り文字で文字列を前後に分割して、区切り文字を含めた分割結果を返します。

  • text.partition("区切り文字")("分割結果1", "区切り文字", "分割結果2")

区切り文字を含めて、文字列を別途処理する必要がある場合に使うと便利です。

text = "12345X54321"

text.partition("X")
# ('12345', 'X', '54321')

分割回数を指定することはできず、初めに出現した区切り文字で分割されます。

text = "12345X54321"

text.partition("5")
# ('1234', '5', 'X54321')

rpartition()を使用すると、右側から分割することができます。

text = "12345X54321"

text.rpartition("5")
# ('12345X', '5', '4321')

正規表現で分割|reモジュール

Pythonの正規表現モジュールreを使用すると、正規表現で区切り文字を指定できます。

正規表現は慣れるまではとっつきにくいですが、使えるようになると文字列操作がぐっと楽になります。

  • re.split("区切り文字の正規表現", "分割する文字列")

正規表現のパターンの作成方法、正規表現を使用した文字列の検索方法については次の記事で解説しています。

≫Python正規表現パターンを図解&サンプルで本当にわかりやすく解説
Pythonのreモジュールで正規表現パターンを作成する際に重要な3つのポイントを解説します。①特定の文字の繰り返しを指定 ②数値や文字、空白など条件による文字条件の指定 ③グループ化によるパターン内の特定部分の抽出
www.yutaka-note.com/entry/regex_01
 

以下では、分割で特に便利な正規表現に絞って紹介します(詳しくは、上の記事を見てください)。

分割で便利な正規表現

文字列の分割のために覚えておくと便利な正規表現を紹介します。

分割方法 説明
複数の区切り文字を指定 |を使用して複数の文字を区切り文字に指定
*例:"aaa\|bbb"aaaまたはbbbで分割される。
数値 or 数値以外で分割 \d+: → 1個以上の数値で分割
\D+: → 1個以上の数値以外で分割
空白文字で分割 \s+ → 1個以上の空白文字で分割
*空白文字:スペース、タブ、改行など" \t\n\r\f\v"
import re
text = "1999年1月2日"

# |を使用して、複数の文字列を区切り文字に指定
re.split("年|月|日", text)
# ['1999', '1', '2', '']

# 数値で分割
re.split("\d+", text)
# ['', '年', '月', '日']

# 数値以外で分割
re.split("\D+", text)
# ['1999', '1', '2', '']

正規表現が使えれば、いろいろな文字列分割ができますね。

オススメ|データ分析の勉強方法

今回はPythonでテキストファイルを分割する方法ついて解説しました。

データ分析初心者の方にはこちらの記事もおススメです。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis
 

Pythonで作業の効率化を目指している方には、次の記事がおススメです。

≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 
≫【レビュー】Python自動処理 全部入り。 | 即効性重視!Pythonによる自動化事例集!
今回は、Pythonの作業自動処理の解説本『Python自動処理全部入り』をレビュー!この本は、特定の作業に特化した即効性の重視の自動化解説本です。よくある作業から自動化しやすい作業を抽出して、それらの自動化を集中的に解説した本という印象です。本の中に自分のニーズに合った自動化処理が見つかれば、その日からすぐ使える事例集のような印象です。
www.yutaka-note.com/entry/python_jido_zenbu