为什么Python 2.7.3认为我的.csv文档都是一行?
我刚开始学习编程,遇到了一些课程作业中的问题,搞不懂。假设有一个叫做 'example.csv' 的文件,里面的内容是这样的。
Key1,Value1
Key2,Value2
Key3,Value3
...
如果我运行下面的代码,它会打印出文件中的每一行,最后一行后面跟着一个星号。我原本以为它会在每一行之间加上一个星号。
infile = open("example.csv", "r")
for line in infile:
print line.strip()
print '*'
#row_elements = line.split(",")
#print row_elements
而且,如果我试着把每一行按逗号分开,只要把上面代码中的井号去掉,我得到的输出是这样的。
['Key1', 'Value1\rKey2', 'Value2\rKey3'...
如果我把 "\r" 传给 .split() 方法,输出会稍微好一点。
['Key1,Value1', 'Key2,Value2'...
不过,我还是不明白为什么 Python 会认为整个文件都在一行上。有没有人能帮我解释一下这个问题?
3 个回答
3
你的输入文件格式很糟糕。在Linux系统中,行与行之间是用'\n'
来分开的。而在Windows系统中,行与行之间是用'\r\n'
来分开的,不过在运行时的库中,'\r'
会被去掉。
在你的文件里,行与行之间是用'\r'
来分开的,这在任何现代操作系统中都不是标准的做法。可能是创建这个文件的程序有些问题。
7
你的文件使用的是 \r
作为换行符(也叫“CR”或“经典Mac”换行方式)。Python的 open
函数默认不处理这种情况。
你可以使用“通用换行符”模式(在 open
中使用 'rU'
模式)来正确打开这个文件。
(需要注意的是,一些Mac文本编辑器仍然使用 \r
作为换行符,不过这些编辑器现在比几年前少多了。)