2017-11-14 12 views
3

私はWindowsでPython 3.6.3を使用しています。 私はこのようなファイルに、単一の複数行の文字列を印刷しよう:なぜ、複数行の文字列が印刷または書き込み時に変更されるのですか? (WindowsのPython 3.6)

with open('test1.txt', mode='w') as f: 
    f.write('test\r\ntest\r\n') 

その後test1.txttest\r\r\ntest\r\r\n代わりのtest\r\ntest\r\nを含むことになります。

所望の出力を得るための回避策はそうのようになります。

with open('test2.txt', mode='w') as f: 
    for line in 'test\r\ntest\r\n'.splitlines(): 
     print(line, file=f) 

なぜこの出来事はありますか?

+0

あなたは自分自身に '\ r'を入れてはなりません。テキストモードはあなたのためにそれを翻訳します。 – user2357112

+0

ええ、私はそれをするべきではないことを知っています。私の場合は、文字列を 'tablib.tsv'から取得します。 –

+0

あなたのデータを文字通り書いて欲しいのなら、なぜ 'mode = 'wb''の代わりに' mode =' w'''y? –

答えて

1

さて、適切に疑問を述べ判明には、多くの場合、自分自身を提示する答えにつながる:

この挙動の理由は、Pythonのuniversal newlineTextIOWrapperPEP 3116から引用)で発見される:

出力時にnewlineNoneの場合、'\n'文字はシステムのデフォルトの行区切り文字os.linesepに変換されます。 改行が''の場合、翻訳は行われません。改行が他の有効な値のいずれかである場合、'\n'文字が指定された文字列に変換されます。

with open('test3.txt', mode='w', newline='') as f: 
    f.write('test\r\ntest\r\n') 
:(翻訳を導くルールは、入力よりも出力のために異なることに注意)これは、

書き込み用にファイルを開くときに、newlineパラメータは、所望の出力を達成するために''に設定することができます

関連する問題