Handling \r\n vs \n newlines in python on Mac vs Windows

Different platforms have different codes for “new line”. Windows have \r\n, Unix has \n, Old macs have \r and yes there are some systems that have \n\r too.

When you open a file in text mode in Python 3, it will convert all newlines to ‘\n’ and be done with it.

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

Text mode is default, so if you say nothing, it’s text mode. But it’s always better to be explicit:

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

If you don’t want the translation of line endings to happen, open the file in binary mode:

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

In Python 2 it’s different. There this conversion would only happen by default on Windows.
If you wanted it to happen on other platforms, you could add the universal newline flag:

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

However, you say that you are on Python 3, and there it happens in text mode on all platforms, so adding the U flag should make no difference.

Leave a Comment