Pythonで改行コードを統一する関数

先日、個人的に使うツールをプログラミングしているときに改行コードを気にする場面があった。
文字列中の改行コード(改行文字列)を統一してくれる関数が欲しいが、1から自分で作ってバグったら時間がもったいない。
たぶんどこかにあるだろうとネットで探してみたが、今回使っているPythonで作られたコードはすぐに見つからない。
一方で、PHPのコードはすぐに見つかった。

PHPで改行コードを統一する関数: CRLF, CR, LF が混在してる文字列を LF に変換するなど
(リンク先:Qiita 2012.02.22の記事)

言語は違うが求めていたものと一致している。
短いし、これなら再現できるかな~、なんて思って真似して作ってみた。
結果、あっさり問題は解決。
元コードの作者様とインターネットに感謝!

需要があるかわからないが、今回作ったコードはここで公開しておく。
Python 3.5.1の環境で動作を確認した。

本体

# convert_eol.py
import re

def convert_eol(string, to="\n"):
    return re.sub(r'\r\n|\r|\n', to, string)

ユニットテスト

# test_convert_eol.py
import unittest
from convert_eol import convert_eol

class TestConvertEol(unittest.TestCase):
    def test_convert_eol_cr(self):
        value = "CR + LF: \r\n CR: \r LF: \n"
        expected = "CR + LF: \r CR: \r LF: \r"
        actual = convert_eol(value, "\r")
        self.assertEqual(expected, actual)

    def test_convert_eol_lf(self):
        value = "CR + LF: \r\n CR: \r LF: \n"
        expected = "CR + LF: \n CR: \n LF: \n"
        actual = convert_eol(value, "\n")
        self.assertEqual(expected, actual)

    def test_convert_eol_crlf(self):
        value = "CR + LF: \r\n CR: \r LF: \n"
        expected = "CR + LF: \r\n CR: \r\n LF: \r\n"
        actual = convert_eol(value, "\r\n")
        self.assertEqual(expected, actual)

if __name__ == "__main__":
    unittest.main()

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA