ラインフィードの互換性

ラインフィードの互換性について

tags:python, tips, experiment
created:2006-02-05T20:24:24

ラインフィードの互換性について WindowsとLinuxではラインフィードキャラクターが違いますね。

CRとLFと

Windowsでは改行コードにCR+LFを期待しているアプリケーションが多い。

代表的なものとしてはnotepad.exeではファイルすべての内容が1行という扱いになります。

LinuxではCRコードがあるとテキストを読めないアプリケーションが多い。

代表的なものとしてはLinux上のPythonがCR+LFだとソース解析エラーになるようです。

お使いのOSでどちらを標準とするのかは

>>> import os
>>> os.linesep
'\r\n'

とすれば、「’\r\n’」か「’\n’」と表示されます。 (ちなみにCR=\r、LF=\nです。)

問題点

以下のコードをWindowsで実行すると・・・。

file('test.txt', 'w').write('hoge\nmoge\n')

「’hoge\r\nmoge\r\n’」という内容のファイルがアウトプットされます。

ご丁寧にPythonファイルオブジェクトはOS推奨の改行コードに変換して出力してしまいます。

これでは、Linuxに読ませたいファイルを出力したい時に困ってしまいます。

注釈

ちなみにWindowsでテキストモードで読み込むと\r\nは\nに変換してくれます。

解決方法

file('test.txt', 'wb').write('hoge\nmoge\n')

というようにバイナリモードで書き出ししましょう。