Python 文字列の分割と連結
ここでは Python 文字列の分割と連結をする方法についてご説明します。
split() メソッドで文字列を分割する
Python の文字列を分割したい時には、split() メソッドが使えます。
split() の構文は次の通りで、元の文字列をデリミタ文字列で区切った文字列のリストを返します。
split(["デリミタ文字列"], [分割回数])
["デリミタ文字列"] と[分割回数] はどちらも省略可能で、省略した場合デフォルトはそれぞれ None と -1 になります。
["デリミタ文字列"] が None の時は、それ以外の文字列を指定した時と少し違って、連続する空白文字列がひとつのデリミタとして文字列が分割されます。
[分割回数]は -1 の時は全部分割され、それ以外の時は左側から指定した数だけ分割されます。
rsplit() というメソッドも全く同じ方法で使え、違いは [分割回数] が指定された時に右側から分割していくところです。
では、実際に split() と rsplit() メソッドを使って文字列を分解してみましょう。
s1 = " aa,bb,cc,dd,ee"
print(s1.split(","))
print(s1.split(",", 2))
print(s1.rsplit(",", 2))
print("-------------------")
s2 = " xx yy zz "
print(s2.split())
print(s2.split(" "))
実行結果は次のようになり、s1 は指定した "," で文字列が分割されています。 [分割回数] を指定した時は、残りはひとつの文字列としてリストの要素になっていますね。
また、s2 の文字列の分割では、"デリミタ文字列" が省略された時と、空白を "デリミタ文字列" に指定した時では分割ロジックが違うことが確認できます。
[' aa', 'bb', 'cc', 'dd', 'ee']
[' aa', 'bb', 'cc,dd,ee']
[' aa,bb,cc', 'dd', 'ee']
-------------------
['xx', 'yy', 'zz']
['', '', 'xx', '', '', 'yy', '', '', 'zz', '', '']
splitlines() メソッドで文字列を分割する
splitlines() メソッドを使うと、"\n" "\r" "\r\n" などの改行文字で文字列を分割することができます。
メソッドの引数には分割後に改行をそのまま残すかどうかを True か False で指定することができ、省略した場合は False となります。
それでは、splitlines() を使って文字列を分割してみましょう。
s = "aaa\r\nbbb\r\nccc\r\n"
print(s)
print(s.splitlines())
print(s.splitlines(True))
実行結果は次のようになり、文字列が改行で分割されていますね。引数に True を渡した時は改行文字が残っているのがわかります。
aaa
bbb
ccc
['aaa', 'bbb', 'ccc']
['aaa\r\n', 'bbb\r\n', 'ccc\r\n']
Python の文字列を連結する
Python の文字列を連結するには join() メソッドが使えます。
使い方は "セパレータにしたい文字列".join(繰り返し可能なオブジェクト) です。
繰り返し可能 (iterable) なオブジェクトとは、リスト、タプル、辞書など、値が集合したデーター構造でループできるオブジェクトのことです。
値に文字列ではないものがあるとエラーになってしまいますのでご注意ください。
では、リストと辞書の文字列を join() メソッドを使って結合してみましょう。
names = [ "Tanaka", "Suzuki", "Sato", "Yamada"]
print(",".join(names))
student = {
"name": "Suzuki",
"age": 15,
"gender": "male"
}
print("/".join(student))
実行結果は次のようになり、指定したセパレータ文字列を挟んで、文字列が結合されています。 辞書のほうは値ではなくキーを結合した文字列が返ります。
Tanaka,Suzuki,Sato,Yamada
name/age/gender
以上、Python 文字列の分割と連結をする方法についてご説明しました。