Python – Why does Python 2.7.3 think the .csv document is all on one line

csvfor-loopline-endingspythonpython-2.7

I'm new to programming and I encountered a problem in some of my coursework that I can't make any sense of. Consider an imaginary file called 'example.csv' with the following contents.

Key1,Value1
Key2,Value2
Key3,Value3
...

If I run the following code, it prints every line in the file followed by a single asterisk on the last line. I expected it to print each line separated by an asterisk.

infile = open("example.csv", "r")
for line in infile:
    print line.strip()
    print '*'
    #row_elements = line.split(",")
    #print row_elements

Furthermore, if I try to split the line at each comma by removing the hashes in the above code I get the following output.

['Key1', 'Value1\rKey2', 'Value2\rKey3'...

By instead passing "\r" to the .split() method the output is slightly improved.

['Key1,Value1', 'Key2,Value2'...

I still don't understand why python thinks the entire file is all on one line in the first place. Does anyone have insight into this?

Best Answer

Your file is using \r as line separators (also known as the "CR" or "Classic Mac" newline convention). Python's open doesn't deal with this by default.

You can use "universal newlines" mode ('rU' mode in open) to open the file properly.

(Note that some Mac text editors still use \r as the line terminator, though these are thankfully much less common now than they were a few years ago.)

Related Topic