文字列を指定した区切り文字で分割してリストとして取得する(split, splitlines)

文字列で用意されているメソッドの中で、文字列を指定した区切り文字で分割しリストとして取得するのに使用できるメソッドの使い方について解説します。

(Last modified: )

指定した区切り文字で分割しリストとして取得する(splitメソッド)

split メソッドは文字列を指定した区切り文字で分割し、分轄された文字列をそれぞれ要素とするリストとして取得します。使い方は次の通りです。

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

1 番目の引数に指定した区切り文字( sep )で文字列( str ) を分割し、それぞれの文字列を要素としたリストとして取得します。区切り文字を省略した場合は空白文字で分割します。また 2 番目の引数には最大の分割回数を指定します。省略した場合は最大分割回数は無制限となります。

最初に区切り文字を省略した場合で試してみます。省略した場合は空白とタブが区切り文字として使用されます。

print("My First Album".split())
>> ['My', 'First', 'Album']

print("  Next  Page  ".split())
>> ['Next', 'Page']

print("Apple\tOrange\tLemon".split())
>> ['Apple', 'Orange', 'Lemon']

最初の例では "My First Album" を空白文字を区切り文字として分割し、 "My" "First" "Album" の 3 つの文字列を要素とするリストを取得しました。

2 番目の例では " Next Page " を空白文字を区切り文字として分割するのですが、 split メソッドで区切り文字を指定しない場合には、連続する空白は 1 つの空白としてまとめられます。また文字列の先頭や最後に空白がある場合は除外されて分割されます。よって " Next Page " は "Next Page" として扱われますので "Next" と "Page" の 2 つの文字列を要素とするリストを取得しました。

3 番目の例では空白の代わりにタブ(\t)を区切り文字として "Apple\tOrange\tLemon" を分割し、 "Apple" "Orange" "Lemon" の 3 つの文字列を要素とするリストを取得しました。

-- --

続いて区切り文字を指定した場合です。区切り文字は 1 文字でも文字列でも可能です。

print("Orange,Lemon,Apple".split(","))
>> ['Orange', 'Lemon', 'Apple']

print("Red*-*Blue*-*Green".split("*-*"))
>> ['Red', 'Blue', 'Green']

print("  Next  Page  ".split(" "))
>> ['', '', 'Next', '', 'Page', '', '']

最初の例では区切り文字としてカンマ(,)を使用しています。また 2 番目の例では区切り文字として "*-*" という 3 文字の文字列を指定しています。

3 番目の例では " Next Page " に対して区切り文字として明示的に空白文字を指定しています。このように区切り文字を省略した場合と明示的に " " を指定した場合は結果が異なります。明示的に指定した場合は連続した空白が 1 つにまとめられません。空白と空白の間には空の文字があるものとして分割されます。また文字列の先頭や最後にある空白も削除されず、先頭や最後に空の文字があるもとして分割されます。

空白を明示的に指定した場合で色々なパターンを試してみました。

print("Next Page".split(" "))
>> ['Next', 'Page']

print("Next  Page".split(" "))
>> ['Next', '', 'Page']

print("Next   Page".split(" "))
>> ['Next', '', '', 'Page']

print(" Next Page ".split(" "))
>> ['', 'Next', 'Page', '']

-- --

続いて最大分割回数を指定した場合です。 2 番目の引数に最大分割回数を指定します。例えば 2 を指定した場合は、最大 2 回分割されるため結果的に文字列は 3 つの文字列に分割されます。

print("A B C D E".split(" "))
>> ['A', 'B', 'C', 'D', 'E']

print("A B C D E".split(" ", 1))
>> ['A', 'B C D E']

print("A B C D E".split(" ", 2))
>> ['A', 'B', 'C D E']

print("A B C D E".split(" ", 3))
>> ['A', 'B', 'C', 'D E']

print("A B C D E".split(" ", 4))
>> ['A', 'B', 'C', 'D', 'E']

print("A B C D E".split(" ", 8))
>> ['A', 'B', 'C', 'D', 'E']

最大分割回数を省略した場合は制限なしとなります。また区切り文字をよりも多い数を指定しても余分に分割されるようなことはありません。

改行文字を区切り文字で分割しリストとして取得する(splitlinesメソッド)

splitlines メソッドは文字列を改行文字で分割し、分轄された文字列をそれぞれ要素とするリストとして取得します。使い方は次の通りです。

str.splitlines([keepends])

区切り文字として認識される改行文字は次のようなものがあります。

\n          改行
\r          復帰
\r\n        改行 + 復帰
\v or \x0b  垂直タブ
\f or \x0c  改ページ
\x1c        ファイル区切り
\x1d        グループ区切り
\x1e        レコード区切り
\x85        改行 (C1 制御コード)
\u2028      行区切り
\u2029      段落区切り

引数を省略した場合は分割に使用された改行文字は分割後の文字列に含まれません。分割文字を含める場合は 1 番目の引数 keepends に True を指定してください。

それでは簡単な例で試してみます。

str1 = "Orange\nLemon\nApple"
print(str1)

>> Orange
>> Lemon
>> Apple

print(str1.splitlines())

>> ['Orange', 'Lemon', 'Apple']
str2 = """\
Hello
My name is Yamada
Thank you"""

print(str2)

>> Hello
>> My name is Yamada
>> Thank you

print(str2.splitlines())

>> ['Hello', 'My name is Yamada', 'Thank you']

改行文字として文字列の中に \n を入れる場合と三連引用符を使った場合でそれぞれ試してみました。結果は同じです。(三連引用符を使った複数行の文字列を入力する方法は「三連引用符を使った複数行の文字列の記述」を参照されてください)。

次に splitlines メソッドの引数に True を指定して分割された文字列に改行文字を含めてみます。

str1 = "Orange\nLemon\nApple"
print(str1)

>> Orange
>> Lemon
>> Apple

print(str1.splitlines(True))

>> ['Orange\n', 'Lemon\n', 'Apple']

分割された文字列に改行文字が含まれるようになりました。

-- --

文字列で用意されているメソッドの中で、文字列を指定した区切り文字で分割しリストとして取得するするのに使用できるメソッドの使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。