Pythonのsplitで文字列を分割
スマホの利用拡大により、SNSから発信される投稿やメールなど文字データの取扱いが増えています。文字列を処理する場合に、英語の文章を単語に分割したり、データの区切りで分割したりなどの加工機能があると便利です。
ここでは、Pythonに実装されている機能となるsplitメソッドや、関数などを使って文字列を分割する方法を解説していきます。
Pythonのメソッド
Pythonのメソッドとは、呼び出す際に使用するデータオブジェクトに結び付いた関数の1種を表します。そもそも関数とは、データとの結びつきが不要で単独で使用できるものを表します。
この場合は、クラスと関係なしに利用できます。メソッドと関数の違いを簡単に言うと、データの渡し方の違いと考えると良いでしょう。
文字列を分割するメソッド
文字列を分割するメソッドは、split()・rsplit()・splitlines()が用意されています。このほか正規表現操作関数としてre.split()も提供されています。
Pythonのリストオブジェクト
Pythonでは、これらの文字列を分割するメソッドを用いて文字列データを渡すことで、個別の文字列に分割することができます。分割された文字列は、リストオブジェクトに格納されます。リストオブジェクトは、角カッコ( “[ ]” )で要素を示した格納形式です。
Python以外のプログラミング言語では、配列という呼び方をする場合が多いです。
Pythonのsplitの使用方法
文字列を分割するメソッドや関数に登場するsplitとは、「分割する」という意味合いを持つ言葉です。ここでは、Pythonのsplitで文字列を分割する方法を解説していきます。先に挙げたsplit()・rsplit()・splitlines()、およびre.split()を実際に使用します。
【参考】:Python Documentation contents
split()メソッドの使用方法
split()メソッドの使用方法は、文字列型のオブジェクトに対して以下の用法で使います。
用法:str.split(デリミタ文字列、最大分割数)
デリミタ文字列は、区切り文字で空白スペース(” “)・カンマ(”,”)・スラッシュ(”/”)などが用いられます。デフォルトは空白スペース(” “)です。最大分割数は最大で何回分割するか指定できます。デフォルトは、-1で分割回数に制限はありません。
実際の使用例は以下の通りです。
txt='This is a pen.'
lst=txt.split()
print(txt)
print(lst)
実行結果は、次の通りです。
This is a pen.
['This', 'is', 'a', 'pen.']
【参考】:Python ドキュメント 組み込み型 str.split
rsplit()メソッドの使用方法
rsplit()メソッドの用法は、以下の通りです。
用法:str.rsplit()(デリミタ文字列、分割数)
デリミタ文字列は、split()メソッドと変わりがありません。分割数は最大で何回分割するか指定するものですが、split()メソッドと異なり、右端から最大何回分割するか指定します。
実際の使用例は以下の通りです。
txt='1,2,3,4,5,6,7,8,9,10'
lst_all=txt.split(',')
lst_l =txt.split(',', 3)
lst_r =txt.rsplit(',', 3)
print(txt)
print(lst_all)
print(lst_l)
print(lst_r)
実行結果は、次の通りです。
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
['1', '2', '3', '4,5,6,7,8,9,10']
['1,2,3,4,5,6,7', '8', '9', '10']
【参考】:Python ドキュメント 組み込み型 str.rsplit
splitlines()メソッドの使用方法
splitlines()メソッドの用法は、以下の通りです。
用法:str.splitlines(改行部分の保持)
splitlines()メソッドは、文字列を改行部分で分解し、それぞれの行のリストを戻します。引数にTrueを指定すると戻すリストに改行コードを含みます。デフォルトはFalseで、戻すリストに改行コードは含みません。
実際の使用例は以下の通りです。9と10の間には、違いの確認のため空行を入れてみました。
txt='1 2 3\n4 5 6\n7 8 9\n\n10'
lst_f=txt.splitlines()
lst_t=txt.splitlines(True)
print(txt)
print(lst_f)
print(lst_t)
実行結果は、次の通りです。9と10の間の空行は、リストに反映されています。
1 2 3
4 5 6
7 8 9
10
['1 2 3', '4 5 6', '7 8 9', '', '10']
['1 2 3\n', '4 5 6\n', '7 8 9\n', '\n', '10']
【参考】:Python ドキュメント 組み込み型 str.splitlines
re.split()関数の使用方法
splitlines()関数は、正規表現にマッチした部分で文字列を分割してくれます。用法は、以下の通りです。
用法:re.split(パターン, 文字列, 最大分割数, フラグ)
パターンは、正規表現の出現パターンです。最大分割数を指定することで、何回まで分割するか指定できます。デフォルトは0で、最大分割数を設定する場合は1以上の値を指定します。正規表現のパターンで取り込む文字を丸カッコ(”( )”)で括ると、全ての文字列を戻します。
丸カッコを使わない場合は、該当する文字のみを戻します。
使用例は以下の通りです。
import re
txt='Peter Piper picked a peck of pickled peppers. '
lst_all=re.split(r'(\W+)', txt)
lst_word=re.split(r'\W+', txt)
print(txt)
print(lst_all)
print(lst_word)
実行結果は、次の通りです。
Peter Piper picked a peck of pickled peppers.
['Peter', ' ', 'Piper', ' ', 'picked', ' ', 'a', ' ', 'peck', ' ', 'of', ' ', 'pickled', ' ', 'peppers', '. ', '']
['Peter', 'Piper', 'picked', 'a', 'peck', 'of', 'pickled', 'peppers', '']
パターンを活用すると、複数の異なる区切り文字で分割することもできます。空白スペース(” “)・カンマ(”,”)・プラス(”+”)・マイナス(”-”)で区切った使用例は、以下の通りです。
import re
txt='1 2,3 4-5 6-7+8,9,10'
lst=re.split('[ ,+-]', txt)
print(txt)
print(lst)
実行結果は、次の通りです。
1 2,3 4-5 6-7+8,9,10
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
【参考】:Python ドキュメント 正規表現操作 re.split
文字列を分割するための関連知識
これまでに文字列を分割するsplit()・rsplit()・splitlines()、そしてre.split()を学びました。ここでは、実際に使用するための関連情報を挙げておきます。
リストオブジェクトの数を確認する
分割した文字列はリストオブジェクトに格納されます。リストに格納された文字列がいくつに分割されたか確認する場合は、len()で配列数を確認します。次の様に実施すれば分割された数が分かります。
txt='This is a pen.'
lst=txt.split()
length=len(lst)
print('Number of words: ',length)
for i in range(length):
print(lst[i])
for j in lst:
print(j)
for文の使用方法を2つ、記載しました。実行例は次の通りです。
Number of words: 4
This
is
a
pen.
This
is
a
pen.
配列の数を知りたいのではなく最後の単語を取り込みたいのであれば、インデックスに-1を指定することで、最後の配列を表示させることもできます。
txt='This is a pen.'
lst=txt.split()
print('Last word is: ',lst[-1])
実行例は次の通りです。
Last word is: pen.
分割を繰り返す方法
処理によっては、1回ずつ、1文字ずつ文字列から単語を抽出したい場合もあります。その場合には、1つの文字ずつ取り込んで処理するのが良いでしょう。
具体的には、次のように1回1文字ずつリストに取り込み、リストのデータをシフトしていきます。
txt='This is a pen.'
lst=txt.split(' ',1)
length=len(lst)
while length > 1:
print(lst)
txt=lst[1]
lst=txt.split(' ',1)
length=len(lst)
print(lst)
print('Done.')
このやり方で取り込んだ文字の最初の要素を用いて、データを処理することができます。実行例は次の通りです。
['This', 'is a pen.']
['is', 'a pen.']
['a', 'pen.']
['pen.']
Done.
メソッドを使わず文字列を分割する方法
Pythonでは、メソッドや関数を使わずに文字列を分割することもできます。スライスという機能です。スライスでは、文字列[開始位置:終了位置] のように始点と終点を指定し、分割することができます。
例えば先頭3文字が識別コード、それ以降が文字データとする場合は、以下のようにスライスで分割できます。
txt='001This is a pen.'
index=txt[:3]
word=txt[3:]
print(txt)
print(index)
print(word)
実行結果は、次の通りです。
001This is a pen.
001
This is a pen.
Pythonのsplitで文字データを活用しましょう
文字列データは、非定型の帳簿やネットから発信される投稿やメールなど、非構造化データと言われる膨大なデータに含まれます。効率よくデータを整理することで、データ分析や活用に役立てることができます。データ活用の前段階として、Pythonのsplitメソッドや関数を、データ整理に役立てましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから