How can I force Python's file.write() to use the same newline format in Windows as in Linux ("\r\n" vs. "\n")?

PythonNewline

Python Problem Overview


I have the simple code:

f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()

Code runs on windows and gives file size 12 bytes, and linux gives 11 bytes The reason is new line

In linux it's \n and for win it is \r\n

But in my code I specify new line as \n. The question is how can I make python keep new line as \n always, and not check the operating system.

Python Solutions


Solution 1 - Python

You need to open the file in binary mode i.e. wb instead of w. If you don't, the end of line characters are auto-converted to OS specific ones.

Here is an excerpt from Python reference about open().

>The default is to use text mode, which may convert '\n' characters to a platform-specific representation on writing and back on reading.

Solution 2 - Python

You can still use the textmode and when you print a string, you remove the last character before printing, like this:

f.write("FooBar"[:-1])

Tested with Python 3.4.2.

Edit: This does not work in Python 2.7.

Solution 3 - Python

This is an old answer, but the io.open function lets you to specify the line endings:

import io
with io.open('tmpfile', 'w', newline='\r\n') as f:
    f.write(u'foo\nbar\nbaz\n')

From : https://stackoverflow.com/a/2642121/6271889

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1148478View Question on Stackoverflow
Solution 1 - PythonPraveen GollakotaView Answer on Stackoverflow
Solution 2 - Python12431234123412341234123View Answer on Stackoverflow
Solution 3 - PythonLeonardoView Answer on Stackoverflow