views:

149

answers:

2

In Python, you can read a file and load its lines into a list by using

f = open('file.txt','r')
lines = f.readlines()

Each individual line is delimited by \n but if the contents of a line have \r then it is not treated as a new line. I need to convert all \r to \n and get the correct list lines.

If I do .split('\r') inside the lines I'll get lists inside the list.

I thought about opening a file, replace all \r to \n, closing the file and reading it in again and then use the readlines() but this seems wasteful.

How should I implement this?

+8  A: 
f = open('file.txt','rU')

This opens the file with Python's universal newline support and \r is treated as an end-of-line.

Ned Deily
...although this feature is deprecated and should not be used in new code according to the Python documentation.
Tim Pietzcker
Thanks! This works as intended and is sufficient for me.Tim, what would be the correct way to do it now?
greye
In Python 3.x universal newline support is on by default, so you don't have to do anything.
Jason Orendorff
+1  A: 

If it's a concern, open in binary format and convert with this code:

from __future__ import with_statement

with open(filename, "rb") as f:
    s = f.read().replace('\r\n', '\n').replace('\r', '\n')
    lines = s.split('\n')
hughdbrown