カンマや空白などで区切られた文字列を分割する方法をご存知でしょうか?
Pythonで文字列を区切りたい場合はsplitメソッドを使用します。
「空白を含む文字列を区切りたい」
「スラッシュを含む文字列を区切りたい」
「文字列を回数を分割して区切りたい」
そんな方に向けて、この記事ではsplitメソッドの以下の内容について解説していきます!
【基礎】splitメソッドの基本的な使い方
【基礎】分割の回数を指定する方法
【基礎】rsplitメソッドを使う方法
【発展】CSVファイルをリストに変換する方法
文字列を分割する方法について、基本からより実践的な内容に関してやさしく解説していきます。
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
splitとは
splitメソッドは、文字列型(String)オブジェクトを分割する為に使用するものです。
splitメソッドの書き方
文字列.split() # 区切り文字を指定 文字列.split(sep) # 分割回数を指定 文字列.split(sep, num)
引数を省略した場合は空白で分割されます。
第一引数には区切り文字を指定することができます。
第二引数には分割回数を指定することができます。
戻り値は、元の文字列が分割されたリストです。
次項よりそんなsplitメソッドの使い方について、パターン別に解説していきます。
空白を含む文字列を区切る
まずは空白で文字列を区切る方法を見ていきましょう。
以下のコードをご覧ください。
mystr = 'Hello world! This is a sample' res = mystr.split(' ') print(res)
出力結果は以下の通りです。
['Hello', 'world!', 'This', 'is', 'a', 'sample']
上のコードでは、mystrに格納されている文字列をスペースで区切ってみました。
ご覧いただけるように、splitメソッドの引数には ‘ ‘ を指定しました。
注意したい点は、文字列を挟むクォーテーション(あるいはダブルクォーテーション)の間は半角スペース一個分の空白があるということです。
スペースを挟まずにクォーテーションを閉じてしまうと、エラーが出てしまうので注意してください。
では今度は、改行を含む文字列を分割してみましょう。
しかし今回の場合は、先ほどのコードと同じ引数では、改行を表すエスケープシーケンス(特殊な文字列を表す記号。改行やタブ、カーソル移動などに使われるもの)である\nが表示されてしまいます。
以下をご覧ください。
mystr = 'Hello world! \nThis is a sample' res1 = mystr.split(' ') print(res1)
['Hello', 'world!', '\nThis', 'is', 'a', 'sample']
\nを表示させないようにするには、引数を指定しないときちんと分割されます。
mystr = 'Hello world! \nThis is a sample' res2 = mystr.split() print(res2)
['Hello', 'world!', 'This', 'is', 'a', 'sample']
まとめると、splitメソッドに引数を与えなければ、文字列は空白ごとに区切られるのです。
空白とは、単なる半角スペースのみではなく、タブ(t)、改行(n)、キャリッジリターン(r)、改ページ(f)なども含みます。
スラッシュを含む文字列で区切る
今までのサンプルコードは全て空白で区切りました。
空白ではなくて、違う文字で区切りたい場合もご紹介したいと思います。
以下のコードをご覧ください。
url = 'www.sejuku.net/blog/example' res = url.split('/') print(res)
出力結果は以下の通りです。
['www.sejuku.net', 'blog', 'example']
上のコードでは、スラッシュ/を含む文字列を区切ってみました。
先ほどのサンプルコードとの違いは、splitメソッドの引数を半角スペースからスラッシュに変更したことのみです。
分割の回数を指定する
splitメソッドでは、区切りたい回数を指定する事も出来るんです。
具体的には、以下のコードをご覧ください。
url = 'www.sejuku.net/blog/example' res = url.split('/',1) print(res)
出力結果は以下の通りです。
['www.sejuku.net', 'blog/example']
上のコードでは、第二引数に区切りたい回数を指定しました。
今回は1と指定したので、先頭から数えて1番目までが区切られました。
ご覧いただけるように、残りのスラッシュ/は無視されています。
rsplitメソッドで逆から分割する
今までのサンプルコードでは、文字列の左側から区切っていました。
しかし、文字列の最後、すなわち逆側から区切りたい場合はどうすればよいのでしょうか。
そんなときは、rsplitメソッドを使うと便利です。
以下のコードをご覧ください。
url = 'www.sejuku.net/blog/example' res = url.rsplit('/',1) print(res)
出力結果は以下の通りです。
['www.sejuku.net/blog', 'example']
上のコードでは、rsplitメソッドを使用し右側から1回文字列を区切りました。
ご覧いただけるように、リストに格納されている一番目の文字列はスラッシュ/を含んでいます。
こうして、先ほどのサンプルコードと反対の結果を得る事が出来ましたね。
CSVファイルをリストに変換してみよう
実践的な使い方のひとつとして、CSVファイルの内容をsplitメソッドを使用し、リストに変換する方法をご紹介したいと思います。
CSVファイルとはカンマなどで区切られた文字で構成されたファイルのことです。
今回は非常にシンプルな、以下のようなCSVファイルを使用します。
[split_test.csv]
81,Japan,Asia 39,Italy,Europe 1,Hawaii,Oceania 91,India,Asia
ではさっそく、以下のコードをご覧ください。
mycsv = open("split_test.csv","r") for line in mycsv: splited_line = line.split(",") print(splited_line) mycsv.close()
出力結果は以下の通りです。
['81', ' Japan', ' Asian'] ['39', ' Italy', ' Europen'] ['1', ' Hawaii', ' Oceanian'] ['91', ' India', ' Asia']
上のコードでは、まずopen関数を使用しCSVファイルを読み込みました。
そしてforループを使用し、一行ごとをsplitメソッドを使用しカンマで分割しました。
全ての処理が終わった後は、ファイルをclose関数で閉じることを忘れないようにしましょう。
まとめ
今回はsplitメソッドの使い方をご紹介しました。
覚えておきたいポイントは
・区切る文字も区切る回数も自由
・一行ずつ分割したいならsplitlinesを使用
・逆方向からの分割もrsplitメソッドで可能
こんな感じですね。
ではみなさんも、この記事を通してsplitメソッドについての知識をどんどん増やしていってくださいね。