テキストの改行を表現する\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さん、今回もご親切にありがとうございました!!!
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪