2011-08-16 17 views
3

私は自宅のPCと仕事場のMacを使います。私はpythonスクリプトやその出力の改行には何の問題もありませんでしたが、何かを私の上司に送るたびに、Windowsの改行について怒っている電子メールを返します。Python for Windowsは ' n'を挿入すると ' r n'を挿入しますか?

最新のものは、すべての行を '\ n'で終了するように指示していたPythonスクリプトの出力でしたが、より詳細な検査(私のMacでは仕事中)では、各行が実際に終了したようです'\ r \ n'と入力します。

何が起こっているのですか、どうすれば停止できますか?私は自宅のLinux仮想マシンですべてのスクリプトを実行していましたが、それはあまりにも時間がかかりすぎていたことがわかりました。確かに簡単な修正がありますか?

答えて

9

これは、ファイルがテキストモードで開かれていて、Pythonが使用しているプラ​​ットフォーム(Windowsの場合は\r\nで、Linuxの場合は\nを使用)に従って改行を正規化しているためです。あなたはこのようにバイナリモードでファイルを開く必要があります。

f = open("myfile.txt","wb") 

あなたはまた、バイナリモードを指定しない限り、ファイルを(\r\n\nによって置き換えられます)で読んだときにそれが逆に同じことを行います

f = open("myfile.txt", "rb") 
+1

「w」として開いたかのように、私はまだまっすぐなテキストを書くことができますか? – Kirt

+2

はい、テキストモードとバイナリモードの唯一の違いは、テキストモードが改行を正規化することです。 –

1

あなたが見ている動作は、Python固有ではありません。これは、Pythonやその他の高水準言語の基礎となるC標準ライブラリのバッファ処理されたファイル処理関数から来ています。そうでないと言わない限り、改行文字を現在のプラットフォームのネイティブテキストファイルの改行シーケンスに変換し、読み込み時にその逆を行います。詳細については、ローカルシステムのfopen()のドキュメントを参照してください。 Windowsでは、書き込み時に\ nが\ r \ nに変換されることを意味します。

改行コード変換と他のopen()モードオプションhereがあります。

最初の場所で出力ファイルを開くときは、open("filename", "w")の代わりにopen("filename", "wb")を使用することをお勧めします。これは自動改行の変換を避けます。あなたの上司がOSXを含むいくつかの形式のUNIXを使用している限り、上司の問題を解決する必要があります。

 
Windows acts like a teletype 
          when it sees new lines 
                without carriage returns. 

を別のアプローチが必要に応じてWindowsを使用していない誰かに送信する前に、あなたのファイルを変換するために、次のようになります。残念ながら、それはまた、いくつかのWindowsのテキストエディタ(?メモ帳など)が妙にあなたのファイルを提示することを意味します。この目的のために、dos2unixおよびflipのような様々な変換プログラムが存在する。

関連する問題