首页 > 解决方案 > 为什么当有换行符时,python 无法跳过 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' 结尾,并且不会删除第一行中的任何其他单元格。为什么会发生这种情况?如何确保删除整个第一行,而不管单元格中的换行符如何?

标签: pythonfilecsv

解决方案


您正在处理一个非常基本和普遍的问题(我猜这就是您被否决的原因):在现代操作系统中,文件没有类型:它们的内容只是一个字节序列,这些字节的含义由应用程序给出(二进制与文本在 Windows 中仍然是一个滑稽的区别)。操作系统的这一关键和基本属性被桌面应用程序(Windows、Gnome、KDE、Finder...)所掩盖:我单击“.csv”文件,桌面打开 Calc(或 Excel),单击在“.exe”文件上,Windows 启动程序,......但这只是传统的。在操作系统级别,文件的内容只是字节,仅此而已。这样做有一个很好的理由:在操作系统级别键入文件会帮助你一周,而你'

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

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

推荐阅读