web-dev-qa-db-ja.com

python MacとWindowsでの\ r \ nと\ n改行の処理

Windowsマシンで実行する場合とMacで実行する場合に異なる出力を与えるpythonスクリプトがあります。さらに掘り下げてみると、Macで(ファイルから)Pythonが改行で読み込まれたときに、\r\nで読み込まれ、Windowsでは\r消えます。

したがって、スクリプト内のすべての\n\r\nに変更すると、Macで正常に動作します。しかし、それを行うと、Windows PCで動作しなくなります。

この問題を簡単に修正する方法はありますか?

33
wrongusername

私はそれがあなたが読んでいるものに依存するかもしれないと思うが、組み込みのopen()関数は 'mode'パラメータを取り、モードに 'U'を渡すと、Pythonクロスプラットフォームで透過的に改行を処理します。Pythonをユニバーサル改行サポートでビルドする必要がありますが、テストしてください!

http://docs.python.org/library/functions.html#open

21
jonesy

プラットフォームごとに、「改行」のコードが異なります。 Windowsには\ r\n、Unixには\ n、古いmacには\ rがあり、はい、いくつかのシステムには\ n\rもあります。

Python 3)でテキストモードでファイルを開くと、すべての改行を '\ n'に変換して完了します。

infile = open("filename", 'r')

テキストモードはデフォルトなので、何も言わない場合はテキストモードです。ただし、明示的にする方が常に優れています。

infile = open("filename", 'rt')

行末の変換を行わない場合は、ファイルをバイナリモードで開きます。

infile = open("filename", 'rb')

Python 2それは異なります。この変換はWindowsでデフォルトでのみ発生します。他のプラットフォームで発生させたい場合は、ユニバーサル改行フラグを追加できます。

infile = open("filename", 'rU')

ただし、Python 3であり、そこではallプラットフォームのテキストモードで発生するため、Uフラグを追加しても違いはありません。

37
Lennart Regebro

Python 3、open()でキーワード引数 "newline = '\ n'"を使用して、テキストファイルの書き込み時に指定された行区切り文字を使用します。詳細については、以下を参照してください。

https://pythonconquerstheuniverse.wordpress.com/2011/05/08/newline-conversion-in-python-3/

http://docs.python.org/3/library/functions.html#open

5
Felix

2つの(\ rまたは\ n)pythonは両方の場合に改行として解釈します。\r\n "は、二重改行として解釈されます。(Windows上のPython 3)

0
as g

Python 3、Open()メソッドには newline パラメーターがあります:

newlineは、ユニバーサル改行モードの動作を制御します(テキストモードにのみ適用されます)。 None、 ''、 '\ n'、 '\ r'、および '\ r\n'を指定できます。次のように機能します。

ストリームから入力を読み取るときに、改行がNoneの場合、ユニバーサル改行モードが有効になります。入力の行は「\ n」、「\ r」、または「\ r\n」で終わる場合があり、これらは呼び出し元に返される前に「\ n」に変換されます。 ''の場合、ユニバーサル改行モードが有効になりますが、行末は翻訳されずに呼び出し元に返されます。他の有効な値がある場合、入力行は指定された文字列でのみ終了し、行末は翻訳されずに呼び出し元に返されます。

ストリームに出力を書き込むときに、改行がNoneの場合、書き込まれた「\ n」文字はシステムのデフォルトの行セパレータos.linesepに変換されます。改行が ''または '\ n'の場合、翻訳は行われません。改行が他の有効な値の場合、書き込まれた「\ n」文字は指定された文字列に変換されます。

Uモード指定子を使用する古い方法は、この新しい方法を支持して廃止されました。

「U」ユニバーサル改行モード(非推奨)

0
jdhao