Pythonで文字列を分割・結合する—split()とjoin()の使い方ガイド
Pythonでは、文字列を分割・結合する際にsplit()
と join()
関数を使います。最近、他の人のコードを見ていたら、あまり使わなかった split()
の意外な使い方に気づきました。これを機にに、split()
と join()
の使い方を改めて詳しく調べてみましたので紹介します。この記事では、split()
と join()
の使い方の使い方とオプションについて、サンプルコードを交えて解説します。
Pythonで文字列を分割
空白文字で分割:split()
Pythonで区切り文字で文字列を分割する場合、split()
を利用します。
オプションを何も指定していない場合(デフォルト設定)は、空白文字(スペース・改行・タブ)で分割します。
下記はコード例です。コード例ようにs.split()
とするだけで文字列を空白文字で区切って分割できます。
s = "this is a test string."
print(s)
# this is a test string.
t = s.split()
print(t)
# ['this', 'is', 'a', 'test', 'string.']
区切り文字を指定して分割: split(sep=..)
区切り文字を指定することも可能です。以下の例では、”,
“を区切り文字として文字列を分割しています。
注意点は、区切り文字を指定すると、空白文字は削除してくれないことです。下のコード例では、, four
の部分にスペースがありますが、これは削除されず分割後は’ four
‘と、スペースが残った状態になります。
s = "one,two,three, four"
print(s)
# one,two,three, four
t = s.split(',')
print(t)
# ['one', 'two', 'three', ' four']
空白を削除して分割したい場合は、replace()
を使ってあらかじめ空白を削除しておくとよいです。
s = "one,two,three, four"
s = s.replace(' ', '')
print(s)
# one,two,three,four
t = s.split(',')
print(t)
# ['one', 'two', 'three', 'four']
区切り数を指定して分割:split(maxsplit=..)
区切り数を指定して区切ることも可能です。区切り数を指定した場合は、文字の先頭から見て見つかった区切り文字で、区切り数に指定した数だけ区切ります。
区切り数を指定した場合は、区切り数+1に分割されることになります。
以下は区切り数を2つに指定した例です。’one’, ‘two’, ‘three,four’の3つに区切られ、3つ目の’,
‘では区切られていないことがわかります。
s = "one,two,three,four"
print(s)
# one,two,three,four
t = s.split(',', maxsplit=2)
print(t)
# ['one', 'two', 'three,four']
この機能の使い方ですが、例えば先頭の’:’までカットして後ろの部分だけ取り出したい場合などに便利です。例えば、最初に定型句”Result is:
“があって、その部分をカットした文字列を取得したい場合には、以下のようにできます。
s = "Result is:xxxx and yyyy, zzzz : This is a ..."
print(s)
# Result is:xxxx and yyyy, zzzz : This is a ...
t = s.split(':', maxsplit=1)[-1]
print(t)
# xxxx and yyyy, zzzz : This is a ...
文字列を右端から分割:rsplit(sep=…, maxsplit=…)
文字列を右側から分割するメソッドも用意されています。maxsplit
を指定しなければsplit
と同じなので普段は使うことは少ないです。
maxsplit
を指定すると右側から指定した数+1の分割を行います。
例えば、先ほどの「区切り数を指定して分割」をrsplit()
に変えると、結果は以下のようになります
これは、末尾の部分だけ取り出したい・削除したい場合などに役に立ちます。
s = "one,two,three,four"
print(s)
# one,two,three,four
t = s.rsplit(',', maxsplit=2)
print(t)
# ['one,two', 'three', 'four']
改行で分割する: splitlines
改行で分割したい場合は、splitlines()
を利用します。
s = "one,two\nthree,four"
print(s)
# one,two
# three,four
t = s.splitlines()
print(t)
# ['one,two', 'three,four']
このメソッドを使わなくてもsplit('\n')
とすれば良いような気もしますが、splitlines()
では、以下のようなコードを改行として分割してくれます。
分割される文字
\n
, \r
, \r\n
, \v
, \x0b
, \f
, \x0c
, \x1c
, \x1d
, \x1e
, \x85
, \u2028
, \u2029
Pythonで文字列を結合
文字列を結合:join
分割された文字列を結合するにはjoin()
を使います。
以下は文字列を空白文字で分割して、,
で結合する例です。
s = "this is a test string."
print(s)
# this is a test string.
t = s.split()
t = ",".join(t)
print(t)
# this,is,a,test,string.
split()
とjoin()
を組み合わせることで無駄な空白を取り除いたりすることが可能です。下記は、改行を削除する例です。
s = "one,two,\nthree,four"
print(s)
# one,two,
# three,four
t = s.split()
t = "".join(t)
print(t)
# ['one,two,three,four']
まとめ
split()
でmaxsplit
が指定できることを知りませんでした。普段使い慣れているメソッドも、調べて見ると知らない機能があるということがわかりました。
実は結構便利な機能なので、たまにはリファレンスを確認しないといけないなと感じました。