48483


Pythonを使ってファイルにデータを出力しようとしています。

以下のコードを実行すると1行ではなく、2行分改行されます。

[code]

    f = open(fileName, "a")
    f.write(data + os.linesep)
    f.close()
    
[/code]

一行分の改行を行うにはどうすればいいでしょうか。


CC BY-SA 4.0
2018-09-17T10:26:07.397
48480
2018-09-17T22:42:00.270
2018-09-17T13:52:39.420
19110
30138
question
python3 テキストファイル
Python3.0 ファイル出力の改行が2行分になる


pythonは`\n`を自動的に[OS固有の改行に変換する](https://docs.python.jp/3/tutorial/inputoutput.html#reading-
and-writing-files)ため、`os.linesep`をWindowsで使うと余分な改行が入る場合があります。

サンプルコード:

[code]

    import os
    with open('hoge.txt', 'w') as f:
        f.write('hello' + os.linesep)
        f.write('world!')
    
    with open('hoge.txt', 'r') as f: #テキストモードで開く
        print(f.read())
    
    with open('hoge.txt', 'br') as f: #バイナリモードで開く(改行コードなども表示できる)
        print(f.read())
    
[/code]

出力結果:  
hello

world!  
b'hello\r\r\nworld!'

上記のように2行分改行されたように見えます。(Windowsのメモ帳で開くと1行分の改行に見えるところが厄介ですが…)  
`os.linesep`は`\r\n`を出力しますが、自動変換で`\n`が`\r\n`になるのでバイナリモードで開くと`\r\r\n`になってしまうのが原因です。

テキストモード(openの第二引数が'b'でない場合)でデータを出力する時は、`os.linesep`ではなく`\n`を使用しましょう。


CC BY-SA 4.0
2018-09-17T11:29:46.670
48483
2018-09-17T22:42:00.270
2018-09-17T22:42:00.270
9820
9820
48480
answer