Posted at

【Python入門】split関数で文字列の分割の仕方

More than 1 year has passed since last update.

※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。

参考サイト:【Python入門】split関数で文字列の分割の仕方


【Python入門】split関数で文字列の分割の仕方

数字、アルファベットや記号などが入り混じった文字列を、ある規則に従って、切り分けてリスト化してくれるのが、split 関数です。

文字列を区切るようなプログラムをゼロから書こうとすると非常に煩雑で、入門者にとってはそれを書くだけでも下手すると1日かかってしまうような大変な作業になってしまう可能性があります。

Split 関数はそういった煩雑さから、解放してくれるとても便利な関数です。これを知っているだけでも作業効率がだいぶ変わりますよ。

目次

1 split関数の基本的な使い方

2 区切り方の応用編

3 rsplit 関数


split関数の基本的な使い方

たとえば、自分で作ったデータが以下のように「 , 」で区切られている場合を考えましょう。

>>> print test

orange,apple,banana,strawberry

文字列名.split(“ 区切り文字 ”) とすることで、区切り文字で区切られたリストを得る事が出来ます。

>>> test.split(",") # test というリストを 区切り文字” , ” で区切る

['orange', 'apple', 'banana', 'strawberry']

また区切り文字がスペースや、改行、タブであるときは、特に区切り文字を指定しなくても、区切ることができます。

>>> test = "orange apple banana strawberry"

>>> test.split() # 引数に何も指定しない場合、スペースやタブ等で自動的に区切る
['orange', 'apple', 'banana', 'strawberry']

これを使うと例えば、区切り文字に2つのスペースが入っていたとしても、綺麗に分割する事が出来ます。

>>> test = "2016  November  15" # スペース2つで区切られている。

>>> test.split() #
['2016', 'November', '15']

このように分割したい文字の間に、複数個の区切り文字があったとしてもこれで簡単に対応できますね。


区切り方の応用編

更に、例えば「2番目までは区切って、3個目以降は区切らない」といった混みいった事をしたい場合は以下のように行う事が出来ます。

>>> test = "orange,apple,banana,strawberry"

>>> test.split(",", 2) # 2回目までは区切って、3個目以降は区切らない。
['orange', 'apple', 'banana,strawberry']

それでは区切り文字は指定せずに、1番目のみ区切りたいというときはどうすればよいでしょう。

例えば、以下のようにしてみたところエラーがでてきてしまいました。

>>> test = "2016  November  15" # スペース2つで区切られている。

>>> test.split(1) # 1番目のみ区切りたかったのですが。。。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object

Python 的には split 関数の最初の引数は、区切り文字をしていしないとどうやらダメなようです。

この場合、「ユーザー側からは区切り文字は露わに指定しませんよ」ということを意味するために、None を用います。

>>> test = "2016  November  15" # スペース2つで区切られている。

>>> test.split(None,1)
['2016', 'November 15']

このようにすることで無事に1番目のみを分割する事が出来ました。


rsplit 関数

またsplit 関数と姉妹関係にあたる rsplit 関数もご紹介します。

rsplit は基本的には splitと同じです。しかし、splitは区切る順序は文字列最初からでしたが、rsplitは区切る順序が文字列の最後からになります。

余談ですが、rsplitの 「r」 は文字列の右側からというright、もしくは後ろという意味のrearから来ていると思われます。

では実際に行ってみましょう。

>>> test = "orange,apple,banana,strawberry"

>>> test.rsplit(",") # “,” で区切る。区切る数に制限は設けない
['orange', 'apple', 'banana', 'strawberry']

このようにrsplit の引数に区切り文字だけ与えた場合は、rsplit関数 = split 関数となります。

それでは、さらに区切る数を引数( = 2) として追加します。

>>> test = "orange,apple,banana,strawberry"

>>> test.rsplit(",",2)
['orange,apple', 'banana', 'strawberry']

たしかに後ろから2番目までが区切られている事がわかりますね。

さらに区切り文字は、1文字である必要はありません。文字列でも全く問題なく、split 関数と rsplit 関数は機能します。

>>> test = "orangehogeapplehogebananahogestrawberry" 

>>> test.split("hoge") # hoge という文字列が区切り文字に対応する
['orange', 'apple', 'banana', 'strawberry']