为什么Python 2.7.3认为我的.csv文档都是一行?

3 投票
3 回答
12160 浏览
提问于 2025-04-17 18:13

我刚开始学习编程,遇到了一些课程作业中的问题,搞不懂。假设有一个叫做 '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 个回答

1

如果你在处理csv文件,建议使用csv模块,这个模块能帮你处理大部分与csv输入输出相关的麻烦事。

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

这里提到的with语句会在你离开这个语句块时自动关闭文件,省去了你手动关闭的麻烦。

3

你的输入文件格式很糟糕。在Linux系统中,行与行之间是用'\n'来分开的。而在Windows系统中,行与行之间是用'\r\n'来分开的,不过在运行时的库中,'\r'会被去掉。

在你的文件里,行与行之间是用'\r'来分开的,这在任何现代操作系统中都不是标准的做法。可能是创建这个文件的程序有些问题。

7

你的文件使用的是 \r 作为换行符(也叫“CR”或“经典Mac”换行方式)。Python的 open 函数默认不处理这种情况。

你可以使用“通用换行符”模式(在 open 中使用 'rU' 模式)来正确打开这个文件。

(需要注意的是,一些Mac文本编辑器仍然使用 \r 作为换行符,不过这些编辑器现在比几年前少多了。)

撰写回答