見出し画像

テキストの改行を表現する\n(LF)、\r\n(CR+LF)、\r(CR)

今日は、csv.writeのlineterminatro引数について、理解したことをアウトプットします。

先日の投稿で、CSVファイルに入力内容を出力するコードを紹介しました。

import csv

try:
   with open('data2.csv', mode='w', encoding='utf-8') as f:
       writer = csv.writer(f, delimiter=',', lineterminator='\n', \
                           skipinitialspace=True)
       while True:
           instr = input('data:')
           if instr == '':
               break
           inlist = instr.split(' ')
           writer.writerow(inlist)
except Exception as error:
   print(str(error))
print('***end.***')

上記のコードの中で、csv.writerのlineterminator引数の指定している部分がわからずじまいでした。

lineterminator引数で、行の区切り文字(改行記号)を指定するのですが、それがなぜ、’\r’なのか、’\n’で指定してはいけないのか?

上記の疑問点をツイートしたところ、以前にTwitterにて知恵を授けてくださった、@y_oshiyoshiさんが、今回も参考サイトの情報を提供してくださいました。

\nはLF文字(Line Feed)、\rはCR文字(Carriage Return)と呼ばれる制御文字です。
テキストの改行を表現する方法は、システムによって下記3パターンが存在します。その表現方法が使われている代表的なOSも併記しています。
• \n(LF):Unix系OS全般、Mac OS X
• \r\n(CR+LF):Windows系OS
• \r(CR):古いMac OS(9以前)
コンピュータ上の表現としては\n1文字で扱うのが自然ですが、もともとタイプライター由来で\r\nが利用されていたという歴史的経緯があります。(CRが印字装置を左端に戻す動作+LFが紙を1行分スクロールする動作)

なるほど。
OSによって違いがあるわけですね。

@y_oshiyoshiさん、今回もご親切にありがとうございました!!!


サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪