文字列の split
メソッドをパラメータなしで実行すると、空白(あるいは改行)をデリミタとして文字列を分割してくれます。
s = 'AAA BBB CCC'
arr = s.split() #=> ['AAA', 'BBB', 'CCC']
さらに各要素の先頭と末尾の余分な空白を削除してくれます。
s = ' AAA BBB CCC '
arr = s.split() #=> ['AAA', 'BBB', 'CCC']
split
メソッドの第一引数(sep
パラメータ)を指定すると、任意のデリミタ文字(文字列)で文字列を分割することができます。
s = 'AAA, BBB, CCC'
arr = s.split(',') #=> ['AAA', ' BBB', ' CCC']
デリミタ文字の前後のスペースは削除されないことに注意してください。
分割後の各要素の先頭/末尾の空白を削除する場合は、例えば下記のように strip
を組み合わせて使用します。
s = ' AAA, BBB, CCC '
arr = [x.strip() for x in s.split(',')]
次のように記述しても同様の結果になりますが、内包表記で記述した方がすっきり書けますね。
s = ' AAA, BBB, CCC '
arr = s.split(',') #=> [' AAA', ' BBB', ' CCC ']
arr = list(map(lambda x: x.strip(), arr)) #=> ['AAA', 'BBB', 'CCC']
split
メソッドの第2引数(maxsplit
パラメータ)を使うと、最大で何回分割するかを指定することができます。
指定するのは「分割の回数」なので、分割後のサイズは最大で「maxsplit + 1」になることに注意してください。
s = 'AAA BBB CCC DDD'
arr = s.split(maxsplit=1) #=> ['AAA', 'BBB CCC DDD']
分割数が決まっているのなら、分割後の値を別々の変数に代入すると可読性の高いコードを記述することができます。
下記は、コロン (:
) で区切られたキー&バリューの文字列を分割する例ですが、最大分割数を 1 に設定しているので、バリュー部分にコロンが含まれていても問題なく動作します。
s = 'Key: This value includes : What will happen?'
key, val = [x.strip() for x in s.split(':', 1)]
print(key) #=> Key
print(val) #=> This value includes : What will happen?