最近、Pythonって結構身近な言語になりましたよね。
簡単な業務ツールを作るところからAI技術まで、幅広く使われている言語です。
今回紹介したいのは、文字列を分割してリストにするメソッド、splitを紹介したいと思います。
splitメソッドは業務ツールでもしばしば使われる事があると思うので、知っているととても便利です!
この記事をご覧いただければ、
・長い文字列を特定の行や特定の文字列で区切る
・特定の決まりで書かれたファイルをリストとして読み込む
といったsplitの基本から、
・splitに関連したメソッド
・正規表現での区切り方
などの応用的な使い方まで紹介しております。
この記事を読めば、splitの使い方を網羅的に理解できるようになっています。
ぜひ、最後までお付き合いください。
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
splitメソッドでできる事(基本編)
Stringを任意の文字で区切り、リスト化する事ができる
まず、splitメソッドとはどのようなものかを紹介します。
splitメソッドはString(文字列)型のメソッドで、ある文字列を、任意の文字のところで区切る時に使用します。
例えば、「Hello, World!」という文字を「,」で区切ってみましょう。
test_str = "Hello, World!" #文字列"Hello, World!"を入れる result = test_str.split(",") #文字列を","で区切りresultにリストとして代入 print(result) #resultリストの中身を表示
実行結果は以下のようになります。
['Hello', ' World!']
このように”Hello”と”World!”に分かれます。
ここで注意していただきたいのは、区切り文字とした”,”が消えてしまっている点です。
この点だけは忘れてしまわないよう意識していただきたいと思います。
引数に文字列を入れずに区切る
また、splitでは文字列を指定せずに文字列を分割することもできます。
以下のコードをご覧ください。
test_str = "Hello World!" result = test_str.split() print(result)
今度は元となる文字列にカンマがありません。
また、split()に分割する文字列を指定していませんね。
これを実行してみると、以下のようになります。
['Hello', 'World!']
お気づきでしょうか?
分割したい文字列を指定しない場合は、空白(スペース)で区切られております。
splitでは分割したい文字列を指定しない場合は、自動的に空白やタブ、改行などで区切られます。
分割回数を指定して区切る
実はsplitメソッドの引数は二つあります。
一つ目は今まで紹介した分割したい文字列、二つ目は分割したい回数を入れる事が可能です。
実際にコードを見て確認しましょう。
test_str = "http://192.168.1.1/version/api" result = test_str.split("/", 3) #二つ目の引数に3を入れる print(result)
実行結果:
['http:', '', '192.168.1.1', 'version/api']
上記のように、二つ目の引数に”3″を入れると、3回区切り、残った文字列をリストの次の要素にまとめて入れます。
これにより、どこまで区切りたいかを指定する事が可能になります。
urlをドメインとAPI名などに分けたりする際に使いやすいかと思います。
また、回数は指定したいけれど区切り文字は指定したくない場合には、文字列の代わりにNoneを入れる事により、回数の指定だけが可能となります。
test_str = "A B C D E" result = test_str.split(None, 3) print(result)
['A', 'B', 'C', 'D E']
なお、このNoneを入れずに分割回数だけを入力するとエラーとなってしまうので、注意が必要です。
splitメソッドでできる事(応用編)
splitの基本的な使い方を学んだところで、応用編とさせていただきます。
応用編では簡単な正規表現で文字列を区切ったり、splitに関連したメソッドを紹介します。
正規表現を用いて複数の単語を区切る
splitで文字を区切る際、区切り文字を複数指定したいと思う事があるでしょう。
その際に使用されるのが、正規表現です。
正規表現は、ある文字列の集合を一つの文字列で表現する事です。
言葉では分かりづらいと思いますので、実例を元に使い方だけでも覚えていきましょう。
import re #正規表現を使う際は、こちらが必要になります。 test_str = "Hello, World! Thaks." #正規表現で、「","または"!"」で区切るという意味 result = re.split(",|!", test_str) print(result)
['Hello', ' World', ' Thaks.']
正規表現では、上記のように複数の条件をひとまとまりにする事などが可能となります。
他にも様々な使い方があり、正規表現を学ぶ事であらゆる文字列に対応させる事ができます。
rspilitメソッドの紹介
splitに関連したメソッドで、rsplitというメソッドがあります。
こちらは、splitの文字区切りを逆から行っていく働きをします。
注意点として、rsplitは右から区切りますが、リストに代入される順番は変わらず左からとなります。
基本編でURLを回数を指定して区切りましたが、それをrsplitで区切って確認しましょう。
test_str = "http://192.168.1.1/version/api" result = test_str.rsplit("/", 2) #今回は2度区切ります。 print(result)
['http://192.168.1.1', 'version', 'api']
右から二つだけ”/”で区切られ、残った文字列がまとめてリストの初めに代入されています。
splitlinesメソッドの紹介
もう一つsplitに関連したメソッドのsplitlinesを紹介します。
splitlinesメソッドは、文字列を行で区切る事ができます。
文章を区切る際、複数行に渡った文章を1行ずつ区切りたい事があると思います。
その際にはsplitlinesが使えます。
test_str = 'apple\norange\nbanana\ngrape' #"\n"は文字列の改行を意味します。 result = test_str.splitlines() print(result)
['apple', 'orange', 'banana', 'grape']
外部ファイルをリストに変換する
最後に、外部ファイルに書き込まれた文字列を分割する方法を紹介します。
外部ファイルが決まったルールで文字列書き込まれている場合は、それを読み込んで文字を区切る事も可能です。
例えば、以下のように書き込まれたファイルがあります。
なお、このファイルはtxtでも、csvファイルでも問題はありません。
以下の内容をtest.txtというファイルに保存してください。
fruits, 1, apple, fruits, 2, orange, fruits, 3, grape,
これをsplitで区切りましょう。
f = open("test.txt", "r") for line in f: #読み込んだファイルの文字列を1行ずつlineに代入 mylist = line.split(',') #それぞれの行の文字列を","で区切る res = filter(lambda w:w != '' and w != '\n', mylist) #空の要素と改行"\n"をリストから抜いたものをstrに代入 print(list(res)) f.close()
以下が結果となります。
['fruits', ' 1', ' apple'] ['fruits', ' 2', ' orange'] ['fruits', ' 3', ' grape']
まとめ
いかがでしたでしょうか?
今回は、splitメソッドを活用した以下の方法を紹介しました。
・splitメソッドの基本的な使い方
・正規表現で文字列を区切る方法
・splitメソッドに関連したrsplit, splitlinesメソッドの働き
文字列を上手く区切る事ができれば、出来る事の幅は広がります!
文字列分割を行う際はぜひ、splitを活用してみましょう。