Why does Python 2.7.3 think my .csv document is all on one line?

萝らか妹 提交于 2019-12-10 22:08:12

问题


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?


回答1:


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.)




回答2:


Your input file is poorly formatted. On Linux, lines are separated by '\n'. On Windows, lines are separated by '\r\n', but code in the runtime library makes the '\r' disappear.

In your file, the lines are separated by '\r', which is not a standard in any modern operating system. Perhaps the program that created the file is flawed in some way.




回答3:


if you're dealing with csv you should use the csv module, it takes care of most of the crap involved with processing csv input/output.

import csv
with open("example.csv", "rb") as infile:
    reader = csv.reader(infile)
    for row in reader:
        print row # a list of items in your file

The with statement hear will automatically close the file for you when you drop out of the statement block.



来源:https://stackoverflow.com/questions/15261557/why-does-python-2-7-3-think-my-csv-document-is-all-on-one-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!