3

我是编程新手,在我的一些课程作业中遇到了一个我无法理解的问题。考虑一个名为“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首先认为整个文件都在一行上。有没有人对此有见识?

4

3 回答 3

7

您的文件\r用作行分隔符(也称为“CR”或“Classic Mac”换行约定)。默认情况下, Pythonopen不处理这个问题。

您可以使用“通用换行符”模式('rU'mode in open)正确打开文件。

(请注意,一些 Mac 文本编辑器仍将\r其用作行终止符,但谢天谢地,这些现在比几年前少得多。)

于 2013-03-07T02:10:17.947 回答
3

您的输入文件格式不正确。在 Linux 上,行由 . 分隔'\n'。在 Windows 上,行由 分隔'\r\n',但运行时库中的代码会使其'\r'消失。

在您的文件中,行由 分隔'\r',这不是任何现代操作系统的标准。也许创建该文件的程序在某些方面存在缺陷。

于 2013-03-07T01:47:19.077 回答
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您退出语句块时,语句会自动为您关闭文件。

于 2013-03-07T02:37:22.537 回答