言語バージョン 3.9.0

公開日 2020年11月19日 JST

更新日 2020年12月19日 JST

コード例の出力としてprint関数を使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

print関数の使用方法

split(str、文字列)

このページでは豊富な例を用いてPythonのstrクラスのsplitの使い方を学ぶことができます。
他のクラスにも同名のメソッドが実装されているので気をつけてください。

splitはstrクラスのメソッドの1つであり、str型(文字列)のオブジェクトに対して使用することができます。
文字列に対して、指定した区切り文字で分割したlist型のオブジェクトを戻り値(返り値)として取得することができ、 csvなどの形式の文字列を処理する際に多く使用されます。

# 定義
str.split(sep=None, maxsplit=-1)

出典:split(strクラス) - Pythonドキュメント

TL;DR

基本

# 半角スペースで区切られた文字列
str1 = 'python js java kotlin swift c'
splitted1 = str1.split()
print(splitted1)
==> ['python', 'js', 'java', 'kotlin', 'swift', 'c']
# splitの戻り値の型はlist
print(type(splitted1))
==> <class 'list'>




# 改行で区切られた文字列
str2 = 'tuple\nlist\ndict'
print(str2)
==> tuple
==> list
==> dict
splitted2 = str2.split()
print(splitted2)
==> ['tuple', 'list', 'dict']




# タブで区切られた文字列
str3 = 'peach\tgrape\tlemon'
print(str3)
==> peach	grape	lemon
splitted3 = str3.split()
print(splitted3)
==> ['peach', 'grape', 'lemon']




# 半角スペース2つで区切られた文字列
str4 = 'tuple  list  dict  set'
splitted4 = str4.split()
print(splitted4)
==> ['tuple', 'list', 'dict', 'set']




# 空文字''に対しては空のlistが返ってくる
str5 = ''
splitted5 = str5.split()
print(splitted5)
==> []




# 連続した空白文字は1つのグループとしてみなされる
str6 = 'python \n\t javascript \t\ngolang'
splitted6 = str6.split()
print(splitted6)
==> ['python', 'javascript', 'golang']

関連情報:type(組み込み関数)の使用方法

任意の区切り文字を指定する(第1引数)

# カンマ(,)等の場合、引数を指定しないでsplitを使用すると区切れない
str1 = 'csv,tsv,suv'
splitted1 = str1.split()
print(splitted1)
==> ['csv,tsv,suv']

# 明示的に区切り文字を指定
splitted2 = str1.split(',')
print(splitted2)
==> ['csv', 'tsv', 'suv']




str2 = 'tuple:list:dict:set'
splitted3 = str2.split(':')
print(splitted3)
==> ['tuple', 'list', 'dict', 'set']




# =と=の間が空文字として区切られる
str3 = 'Python==JavaScript==Golang==Scala'
splitted4 = str3.split('=')
print(splitted4)
==> ['Python', '', 'JavaScript', '', 'Golang', '', 'Scala']

splitted5 = str3.split('==')
print(splitted5)
==> ['Python', 'JavaScript', 'Golang', 'Scala']




# 空文字''に対して区切り文字を指定してsplitを使用すると空文字''のlistが返ってくる
str4 = ''
splitted6 = str4.split(',')
print(splitted6)
==> ['']




# 半角スペース2つで区切られた文字列
str5 = 'Foo  Bar  Ninja'
splitted7 = str5.split(' ')
# 半角スペースの間が空文字''として区切られる
print(splitted7)
==> ['Foo', '', 'Bar', '', 'Ninja']

# 空文字''の区切り文字は使用不可
splitted8 = str5.split('')
==> ValueError: empty separator

区切る回数を指定する(第2引数)

# 区切り処理を1回に限定
str1 = 'python,javascript,java,golang,groovy'
splitted1 = str1.split(',', 1)
print(splitted1)
==> ['python', 'javascript,java,golang,groovy']

# 区切り処理を2回に限定
splitted2 = str1.split(',', 2)
print(splitted2)
==> ['python', 'javascript', 'java,golang,groovy']




# 先頭の2個の要素が削除された文字列の取得
str2 = 'html/py/go/java/js/ts'
splitted3 = str2.split('/', 2)
# -1を指定することでlistの最後尾の要素を指定可能
print(splitted3[-1])
==> go/java/js/ts




# 区切り処理の回数だけ指定したいときはキーワード引数のmaxsplitだけ指定する
str3 = 'January February March'
splitted4 = str3.split(maxsplit=1)
print(splitted4)
==> ['January', 'February March']





# 以下の場合はmaxsplitを指定しない場合と同様の挙動
str4 = '1 2 3 4 5 6 7 8'
splitted5 = str4.split(maxsplit=-1)
print(splitted5)
==> ['1', '2', '3', '4', '5', '6', '7', '8']

# 指定した区切り回数が実際の処理数を超える場合
splitted6 = str4.split(maxsplit=10)
print(splitted6)
==> ['1', '2', '3', '4', '5', '6', '7', '8']

他の類似メソッド(rsplit, splitlines)

# split
str1 = '1,2,3,4,5,6,7,8,9,10'
splitted1 = str1.split(',', 3)
print(splitted1)
==> ['1', '2', '3', '4,5,6,7,8,9,10']

# rsplitを使用して文字列の末尾から区切り処理が可能
splitted2 = str1.rsplit(',', 3)
print(splitted2)
==> ['1,2,3,4,5,6,7', '8', '9', '10']





str2 = '22\tSSH\n80\tHTTP\n443\tHTTPS'
print(str2)
==> 22	SSH
==> 80	HTTP
==> 443	HTTPS

# タブ(\t)と改行(\n)が区切られてしまう
print(str2.split())
==> ['22', 'SSH', '80', 'HTTP', '443', 'HTTPS']

# 改行(\n)のみ区切られる
splitted3 = str2.splitlines()
print(splitted3)
==> ['22\tSSH', '80\tHTTP', '443\tHTTPS']
for e in splitted3:
    print(e)
==> 22	SSH
==> 80	HTTP
==> 443	HTTPS

関連情報:forの使用方法

解説

# 定義
str.split(sep=None, maxsplit=-1)

出典:split(strクラス) - Pythonドキュメント

基本

文字列に対してsplitを使用すると、改行(\n)やタブ(\t)を含む空白文字(原文:empty strings)を検知し、 その位置で分割した文字列要素のlistを生成します。
splitに引数を指定しない場合、連続した空白文字は1つのグループとみなされて分割されます。

また、空文字('')に対してsplitを引数無しで指定すると空のリストが戻り値(返り値)として得られます。

str1 = 'this statement can be splitted.'
splitted1 = str1.split()
print(splitted1)
==> ['this', 'statement', 'can', 'be', 'splitted.']



str2 = 'python \n\t javascript \t\ngolang'
splitted2 = str2.split()
print(splitted2)
==> ['python', 'javascript', 'golang']

任意の区切り文字を指定する(第1引数)

splitの第1引数として、任意の区切り文字を指定することが可能です。

文字列中の区切り文字同士が連続した箇所は空文字('')として分割されます。 csvなどではデータがない場合などに該当しますが、区切り文字自体が連続したものである場合(,,::など)は指定方法に注意が必要です。

str1 = 'Foo,Bar,Ninja'
splitted1 = str1.split(',')
print(splitted1)
==> ['Foo', 'Bar', 'Ninja']




str2 = 'kiwi::grape::orange::strawberry'
splitted2 = str2.split(':')
print(splitted2)
==> ['kiwi', '', 'grape', '', 'orange', '', 'strawberry']

splitted3 = str2.split('::')
print(splitted3)
==> ['kiwi', 'grape', 'orange', 'strawberry']

区切る回数を指定する(第2引数)

splitの第2引数に区切る回数を指定することが出来ます。

文字列の先頭から何回区切り処理を実行するかを指定でき、 指定された回数に達した場合は残りの文字列は分割されずに戻り値のlistに格納されます。 データの前処理や加工などにおいて、最初の数データは無視したいといった場合にも用いられることがあります。

キーワード引数の形式で用いることにより、区切り文字の指定をせずに区切る回数を指定することが可能です。

str1 = 'py,js,ts,go,html,md'
splitted1 = str1.split(',', 4)
print(splitted1)
==> ['py', 'js', 'ts', 'go', 'html,md']

# 先頭の4要素が削除された文字列(データ)の取得
print(splitted1[-1])
==> html,md




# 指定した区切り回数が実際の処理数を超える場合
str2 = '1=2=3=4=5'
splitted2 = str2.split('=', 10)
print(splitted2)
==> ['1', '2', '3', '4', '5']




str3 = 'python javascript java kotlin'
splitted3 = str3.split(maxsplit=1)
print(splitted3)
==> ['python', 'javascript java kotlin']

他の類似メソッド(rsplit, splitlines)

strクラスにはsplitと似た挙動をするメソッドが他にもあります。
ここではrsplitsplitlinesを紹介します。

rsplitは、splitが文字列先頭から分割処理を行うのに対し、文字列末尾から分割処理を行います。
引数の設定などはsplitと同じです。

splitlinesは改行の場合のみ分割処理を行います。
splitを引数無しで利用する際は改行(\n)やタブ(\t)なども区切りとして扱われてしまいますが、splitlinesは改行のみ区切りとして処理します。 split('\n')と表現しても同じことを実現できます。

str1 = 'Python,JavaScript,Kotlin,Swift'
splitted1 = str1.split(',', 1)
print(splitted1)
==> ['Python', 'JavaScript,Kotlin,Swift']

splitted2 = str1.rsplit(',', 1)
print(splitted2)
==> ['Python,JavaScript,Kotlin', 'Swift']





# 半角スペースと改行が混ざった文字列
str2 = '22 SSH\n80 HTTP\n443 HTTPS'
print(str2)
==> 22 SSH
==> 80 HTTP
==> 443 HTTPS

splitted3 = str2.split()
print(splitted3)
==> ['22', 'SSH', '80', 'HTTP', '443', 'HTTPS']

splitted4 = str2.splitlines()
print(splitted4)
==> ['22 SSH', '80 HTTP', '443 HTTPS']

# splitlinesを使用したときと同じ結果
splitted5 = str2.split('\n')
print(splitted5)
==> ['22 SSH', '80 HTTP', '443 HTTPS']

1次情報

split(strクラス) - Pythonドキュメント