Python splitの使い方まとめ

split

Pythonの文字列は、メソッドsplitを用いることでlistに分割することができます。
まずは実際にコードを見てみましょう。下記のような半角スペース区切りで単語が結合されている文字列を考えます。

1
2
3
>>> fruits = 'orange lemon apple banana grape'
>>> fruits.split()
['orange', 'lemon', 'apple', 'banana', 'grape']

区切り文字(ここでは半角スペース)は連続して複数入っている場合は一つの区切り文字として扱われます。また、文字列の先頭や末尾に入っている区切り文字は無視されます。

1
2
>>> fruits2 = ' orange   lemon apple banana grape '
['orange', 'lemon', 'apple', 'banana', 'grape']

改行コードも区切り文字として分割されます。

1
2
>>> fruits3 = ' orange\nlemon apple\rbanana grape '
['orange', 'lemon', 'apple', 'banana', 'grape']

区切り文字の指定

また、区切り文字を自分で指定することもできます。

1
2
3
4
>>> fruits.split(' ')
['orange', 'lemon', 'apple', 'banana', 'grape']
>>> fruits.split('a')
['or', 'nge lemon ', 'pple b', 'n', 'n', ' gr', 'pe']

ただし、区切り文字の指定を行なった場合は、先述のルール

1
区切り文字(ここでは半角スペース)は連続して複数入っている場合は一つの区切り文字として扱われます。また、文字列の先頭や末尾に入っている区切り文字は無視されます。

は適用されません。すなわち

1
2
3
fruits2 = ' orange   lemon apple banana grape '
fruits2.split(' ')
['', 'orange', '', '', 'lemon', 'apple', 'banana', 'grape', '']

のような挙動となるので中板必要です。

maxsplitの指定

最大で何分割をするか指定することもできます。

1
2
3
4
5
6
7
8
fruits.split(' ',1)
['orange', 'lemon apple banana grape']
```
あまりメリットがあるように思えませんが、取り出したい要素が何番目か決まっている場合は、
無駄な分割をせずに済みます。
```python
fruits.split(' ',1)[0]
'orange'

また、rsplitを用いると、文字列の末尾から分割をすることができるため、
取り出したい要素が後ろの方にある場合は下記のような無駄なく要素を取り出せます

1
2
3
4
>>> fruits.rsplit(' ',1)
['orange lemon apple banana', 'grape']
>>> fruits.rsplit(' ',1)[-1]
'grape'

正規表現を用いたい場合

区切り文字をリストなどで複数指定することはできません。

1
fruits.split(['1','2']) #  エラー。リストを指定することはできない

そう言った場合は正規表現を使うと良いでしょう。

1
2
3
4
>>> import re
>>> fruits4 = 'orange1lemon2banana21grape'
>>> print(re.split('\d+', fruits4))
['orange', 'lemon', 'banana', 'grape']

splitlines

文字列を改行コードで分割したい場合はsplitlinesを利用すると良い。この場合、半角スペースは区切り文字として扱われない。

1
2
3
4
fruits3 = ' orange\nlemon apple\rbanana grape '
lines
fruits3.splitlines()
[' orange', 'lemon apple', 'banana grape ']