我是编程的新手,在我的一些课程中遇到了一个我无法理解的问题。考虑一个名为'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认为整个文件首先都在一行上。有没有人对此有所了解?
答案 0 :(得分:7)
您的文件使用\r
作为行分隔符(也称为“CR”或“Classic Mac”换行符约定)。 Python的open
默认不处理这个问题。
您可以使用“通用换行符”模式('rU'
中的open
模式)正确打开文件。
(请注意,有些Mac文本编辑器仍然使用\r
作为行终止符,但幸运的是,现在它们比几年前更不常见。)
答案 1 :(得分:3)
您的输入文件格式不正确。在Linux上,行由'\n'
分隔。在Windows上,行由'\r\n'
分隔,但运行时库中的代码使'\r'
消失。
在您的文件中,这些行以'\r'
分隔,这不是任何现代操作系统中的标准。也许创建该文件的程序在某种程度上存在缺陷。
答案 2 :(得分:1)