プログラミング
記事内に商品プロモーションを含む場合があります

Pythonで文字列を分割・結合する—split()とjoin()の使い方ガイド

Aru

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が指定できることを知りませんでした。普段使い慣れているメソッドも、調べて見ると知らない機能があるということがわかりました。

実は結構便利な機能なので、たまにはリファレンスを確認しないといけないなと感じました。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました