Pythonでテキストファイルを読み込んだときに、行毎に分割したリストにする

Pythonでテキストファイルを読み込んでデータを処理する際に、1行毎に分割してリストにすると便利な場合がありますので、分割してみます。

目次

  1. splitメソッドで分割する
  2. splitlinesメソッドで分割する

splitメソッドで分割する

splitメソッドの分割文字に改行文字を指定すれば、改行文字のところで分割してリストにしてくれます。

ret = str.split([sep], [maxsplit])
変数 内容
str str 分割の対象になる文字列オブジェクト。
sep str 省略可。既定値はNone。分割する文字。
maxsplit int 省略可。既定値は-1。分割する数。
ret list 分割した結果。文字列のリスト。

maxsplitが-1のときは、できる限りの分割をします。

試してみましょう。

こういう文書のファイルを読み込んで、splitで分割してリストにしてみます。

難波津に咲くやこの花冬ごもり今は春べと咲くやこの花
ちはやぶる神代も聞かず竜田川からくれなゐに水くくるとは
瀬をはやみ岩にせかるる滝川のわれても末に逢はむとぞ思ふ
憂かりける人を初瀬の山おろしよ激しかれとは祈らぬものを
もろともにあはれと思え山桜花よりほかに知る人もなし
>>> with open('test.txt', mode='rt', encoding='utf-8') as f:
...     text = f.read()
>>> text.split('\n')
['難波津に咲くやこの花冬ごもり今は春べと咲くやこの花',
 'ちはやぶる神代も聞かず竜田川からくれなゐに水くくるとは',
 '瀬をはやみ岩にせかるる滝川のわれても末に逢はむとぞ思ふ',
 '憂かりける人を初瀬の山おろしよ激しかれとは祈らぬものを',
 'もろともにあはれと思え山桜花よりほかに知る人もなし',
 '']

分割できました。

空文字がリストの最後に入っていますが、これは元の文字列の最後の行の末に改行文字があるためです。元の文字列が分割文字で終わっていても、そこで分割してしまうのですね。

splitlinesメソッドで分割する

splitlinesメソッドも、文字列を行毎に分割したリストを作ります。

ret = str.splitlines([keepends])
変数 内容
str str 分割の対象になる文字列オブジェクト。
keepends bool 省略可。既定値はFalse。結果に改行を含めるか。
ret list 分割した結果。文字列のリスト。

試してみましょう。

上記と同じテキストファイルを読み込んでみます。

>>> with open('test.txt', mode='rt', encoding='utf-8') as f:
...     text = f.read()
>>> text.splitlines()
['難波津に咲くやこの花冬ごもり今は春べと咲くやこの花',
 'ちはやぶる神代も聞かず竜田川からくれなゐに水くくるとは',
 '瀬をはやみ岩にせかるる滝川のわれても末に逢はむとぞ思ふ',
 '憂かりける人を初瀬の山おろしよ激しかれとは祈らぬものを',
 'もろともにあはれと思え山桜花よりほかに知る人もなし']

>>> text.splitlines(True)
['難波津に咲くやこの花冬ごもり今は春べと咲くやこの花\n',
 'ちはやぶる神代も聞かず竜田川からくれなゐに水くくるとは\n',
 '瀬をはやみ岩にせかるる滝川のわれても末に逢はむとぞ思ふ\n',
 '憂かりける人を初瀬の山おろしよ激しかれとは祈らぬものを\n',
 'もろともにあはれと思え山桜花よりほかに知る人もなし\n']

splitlinesは、元の文字列の最後についている改行文字を無視します。ですから、splitのときとは異なって空のデータがリストにありませんね。

また、splitlinesはLF単独も、CR単独も、CRLFも改行文字と判定します。気になるときにはこちらが便利だと思います。

広告

Pythonのファイル入出力カテゴリの投稿