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