home changes contents help options

046:文字列を行に分ける

行単位の文字列のリストに分ける

splitlines メソッドを用います。デフォルトの動作では改行文字は削除されます。 keepends 引数に真値を渡すと改行文字を残すことができます。

>>> s = 'aaa\nbbb\nc c c\n'
>>> s.splitlines()
['aaa', 'bbb', 'c c c']
>>> s.splitlines(True)
['aaa\n', 'bbb\n', 'c c c\n']

改行コードは OS によって異なりますが、 splitlines メソッドは問題なく動作してくれます。とはいえ、テキストモードでファイルからデータを読み込んでいるならば、各 OS の改行コードは \n (LF) に変換されるので必要ない機能かもしれません。

>>> s_unix = 'abc\ndef\n'        # Unix 互換 OS 各種。 \n (LF)
>>> s_windows = 'abc\r\ndef\r\n' # Windows 。 \r\n (CR LF)
>>> s_mac9 = 'abc\rdef\r'        # Mac OS 9 以前。 \r (CR)
>>> s_unix.splitlines()
['abc', 'def']
>>> s_windows.splitlines()
['abc', 'def']
>>> s_mac9.splitlines()
['abc', 'def']

split メソッドや string モジュールの split 関数(廃止予定)でも分割することができますが、 splitlines メソッドを用いたほうがよいでしょう。 split メソッドを使用する場合、引数には改行文字を入れます。

>>> s.split('\n')
['aaa', 'bbb', 'c c c', '']
>>> s.split() # 引数を省略するとスペース、\t, \n, \r, での分割となり意味が異なる
['aaa', 'bbb', 'c', 'c', 'c']

文字列を行ごとに処理する

文字列のリストに分け、これを for 文で処理します。

>>> for line in s.splitlines():
...   print line
...
aaa
bbb
c c c

関連