为什么有换行符时python为什么无法跳过csv中的第一行?

时间:2019-09-23 20:15:52

标签: python file csv

我正在用python读取csv文件。我跳过了第一行,它只是描述性的元数据。这就是我正在做的:

f = open(in_file)
#skip the first row
next(f)
#...some data processing

这很好,但是当第一行包含带有换行符的单元格时(例如:

some random cell
with a new line

next(f)命令返回直到该单元格并包括该单元格的所有单元格,但以some random cell \n'结尾,并且不删除第一行中的任何其他单元格。为什么会发生这种情况,并且无论单元格中的换行符如何,如何确保删除第一行?

1 个答案:

答案 0 :(得分:1)

您要处理的是一个非常基本和普遍的问题(这就是为什么我认为自己被否决了):在现代操作系统中,没有键入文件:它们的内容只是一个字节序列,而这些字节的含义字节由应用程序提供(二进制与文本在Windows中仍然是反传统的区别)。桌面应用程序(Windows,Gnome,KDE,Finder等)掩盖了操作系统的这一至关重要的基本属性:单击“ .csv”文件,桌面打开Calc(或Excel),单击在“ .exe”文件上,Windows启动该程序,...但这只是常规操作。在操作系统级别,文件的内容仅是字节,仅此而已。这样做有一个很好的理由:在OS级别上键入文件可以为您提供一周的帮助,并且您将在余生中与之抗争。

回到您的问题:Python不会为您决定应特别小心地打开“ xyz.csv”文件。它会打开文件,让您以字节或字符的形式读取文件,并且必须自己处理内容。幸运的是,Python附带了“内置电池”,并提供了csv module来包装文件:

import csv

with open(path, 'r', encoding='...') as f: # set the encoding ofthe file, e.g. utf-8
    reader = csv.reader(f) # you may set the delimiter, quote char, etc.
    for row in reader:
        ... # do what you want with each row