いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

雑記 Pythonは使いやすい? OSによる改行コードの違い

 最近は使うプログラミング言語Pythonばかりです。さすがに慣れてきて、一応手元に辞書っぽいものを置き、ネットも使って分からないことを調べながらですが、あまり困らずに書いています。でもfor文などは多分C言語みたいな書き方をしてしまっている場面が多いと思います。それでもまあよし。特に問題は起こっていません。ところでよく「Pythonは初心者に易しい」とか「Pythonは読みやすい」とか聞きますが、ホントかな……? 例えばif文など、インデントでブロックを明示しなければならず、しかもC言語みたいに{}でブロックを囲うということもしません。コメント行も入れ方によっては「インデントがおかしい」みたいなエラーにされたり、2,3回面倒くさくて放り出したことがあります。今では慣れてだいたい平気にはなりましたが、しばらく結構な違和感があったのです。でも「ライブラリが豊富」だそうですし当分はPythonでいくことになるでしょう。
 さて、Pythonについて書いたところでひとつ。知らなかったのですが、OSによってテキストファイルの改行コードは違うのだそうです。テキストファイルとは、まあWindowsの「メモ帳」で中身を見られる、そういうファイルです。改行コードは、それがあるとファイルの内容を表示したときにその改行コードのある位置で改行されます。言い方を変えると、行の最後につくのが改行コードなのです。この改行コードが、WindowsではCR, LF(2つ並べる)、MacではCRだけ、UNIXではLFだけなのだそうです(16進数でCRは0x0d、LFは0x0a。10進数ではそれぞれ13、10)。インタプリタを開発中、とこのブログで何度か書いていますが、インタプリタにはプログラムを読ませます。プログラムはテキストファイルなので当然改行記号についても気にしておかなければなりません。最初、改行コードはCR,LFのつもりでプログラムしていましたが、これでは上に書いたような事情でOSによっては誤動作します。どうしよう……と思っていたらうまいのがありました!

import os
splt = os.linesep

これで、spltにはOSに応じた改行コードが入るようです。うまくできてる!! 自前でなんとかするなら例えばOSを調べるという方法があります。あるいはCRかLFが出てきたら改行と判断してしまう、という手も。