您遇到过 CSV 文件吗?在本文中,我将向您展示什么是 CSV 文件,以及在 Python 中使用它们有多么容易。

如果您是后端开发人员或数据科学家,那么您可能已经处理过 CSV 文件。它是处理和传输数据的最常用格式之一。许多 Python 库都可以处理 CSV,但在本文中,我们将重点介绍 Python 的 csv 模块。

什么是 CSV 文件?

CSV 文件,也称为逗号分隔值文件,是一种包含数据记录的文本文件。每行代表不同的记录,包含一个或多个字段。这些字段代表不同的数据值。

让我们看一些 CSV 示例。下面是包含学生数据的 CSV 文件片段:

firstname,lastname,class
Benjamin,Berman,2020
Sophie,Case,2018

第一行是标题,本质上是列名。每行的字段数与第一行的列名数相同。我们使用逗号作为分隔符(即分隔一行中的字段)。

让我们看看第二个例子:

firstname|lastname|class
Benjamin|Berman|2020
Sophie|Case|2018

此代码片段的结构与第一个代码片段相同。不同之处在于分隔符:我们使用竖线。只要我们知道 CSV 文件的一般结构,我们就可以处理它。

为什么 CSV 文件如此常见?

本质上,CSV 文件是纯文本文件,这意味着它们非常简单。这种简单性使得创建、修改和传输它们变得容易——无论使用什么平台。因此,表格数据(即按行结构的数据,其中每行描述一个项目)可以在原本可能不兼容的程序或系统之间移动。

这种简单性的另一个好处是,将这些数据导入电子表格和数据库非常容易。对于电子表格,只需打开 CSV 文件即可自动将数据导入电子表格程序。

CSV 文件最常见的用途之一是需要提取数据库的部分数据以供非技术同事使用。大多数现代数据库系统允许用户将数据导出到 CSV 文件中。我们可以轻松地向非技术人员提供包含所需数据的 CSV 文件,而无需费力地使用数据库系统。我们还可以轻松地从电子表格中提取 CSV 文件并将其插入到我们的数据库中。这使得非技术人员与数据库之间的交互变得容易得多。

有时,我们可能会处理实际的 CSV 文件——例如,当一个团队抓取数据并将其交付给应该处理数据的团队时。最常见的数据交付方式是使用 CSV 文件。或者,我们可能需要从无法交互的旧系统中获取一些数据。最简单的解决方案是以 CSV 格式获取这些数据,因为文本数据更容易在系统之间移动。

读取 CSV 文件非常常见,因此 Python 技术面试中经常会出现有关它的问题。您可以在 这篇文章 。即使您对数据科学职位不感兴趣,也请查看;您可能会在其他 Python 工作中遇到其中一些问题。

使用 Python 的 csv 模块

有许多 Python 模块可以读取 CSV 文件,但在某些情况下我们可能无法使用这些库,例如由于平台或开发环境限制。因此,我们将重点介绍 Python 的内置 csv 模块。下面我们有一个 CSV 包含两个学生成绩的文件:

Name,Class,Lecture,Grade
Benjamin,A,Mathematics,90
Benjamin,A,Chemistry,54
Benjamin,A,Physics,77
Sophie,B,Mathematics,90
Sophie,B,Chemistry,90
Sophie,B,Physics,90

该文件包含六条记录。每条记录包含一个姓名、一个班级、一个讲座和一个成绩。每个字段用逗号分隔。要处理此文件,我们将使用 csv.reader() 接受可迭代对象的函数。在本例中,我们将为其提供一个文件对象。以下是打印 Report.csv 文件的所有行的代码:

import csv
with open("Report.csv", "r") as handler:
 reader = csv.reader(handler, delimiter=',')
 for row in reader:
   print(row)

让我们逐行分析此代码。首先,我们导入常规 Python 安装附带的 CSV 模块。然后我们打开 CSV 文件并创建一个名为 的文件处理程序 handler 。由于此文件处理程序是一个可迭代对象,每当 __next__ 调用该方法时都会返回一个字符串,因此我们可以将其作为函数中的参数 reader() ,并获取我们称为 的 CSV 处理程序 reader 。现在我们可以迭代 reader;它的每个元素都将是我们原始 CSV 文件中每行的字段列表。

请记住,CSV 文件可以将字段名称作为其第一行。如果我们知道这种情况,我们可以使用该 csv.DictReader() 函数创建一个处理程序。此函数不会为每一行返回一个列表,而是为每一行返回一个字典。每个字典的键是 CSV 文件第一行中的名称。

CSV 方言及其处理方法

尽管 CSV 代表“逗号分隔值”,但这些文件没有固定的标准。因此, csv 允许我们指定 CSV 方言。该 csv.list_dialects() 函数列出了 csv 模块的内置方言。对我来说,这些是 excel , excel-tab 、 和 unix .

方言 excel 是直接从 Microsoft Excel 导出的 CSV 文件的默认设置;其分隔符是逗号。它的一个变体是 excel-tab ,其中分隔符是制表符。有关这些方言的更多信息,请参阅 Python GitHub 页面 .

如果您的公司或团队使用自定义样式的 CSV,您可以创建自己的 CSV 方言并使用该 register_dialect() 函数将其放入系统中。有关更多详细信息,请参阅 Python GitHub 页面 。示例如下:

csv.register_dialect('myDialect',delimiter='|',
   skipinitialspace=True,
                    quoting=csv.QUOTE_ALL)

然后您可以使用新功能 myDialect 来读取 CSV 文件:

import csv
with open("Report.csv","r") as handler:
 reader = csv.reader(handler, dialect="myDialect")

这与我们之前的例子很相似,但我们不是提供分隔符的参数,而是简单地将新的方言作为参数。

这里我们声明我们正在创建一个名为“myDialect”的方言。此方言将使用竖线 ( | ) 作为分隔符。它还表明我们要跳过分隔符后的任何空格(空空格),并且所有值都在引号内。还有一些可以设置的参数;有关详细信息,请参阅上面的链接。

如果我们不懂 CSV 方言怎么办?

有时我们不知道 CSV 文件包含什么方言。在这种情况下,我们可以使用该 csv.Sniffer() 功能。我发现以下两个函数非常有用:

header_exists  = csv.Sniffer().has_header(reader)
	sniffed_dialect = csv.Sniffer().sniff(reader)

第一个函数返回一个布尔值,表示是否有标题。第二个函数返回 找到的方言 csv.Sniffer() 。当我们不知道 CSV 文件的结构时,使用这些函数总是有益的。

现在您已经了解了 CSV 文件和 Python......

…你需要练习!CSV 文件格式是最古老和最常见的数据传输方法之一。在担任数据科学家或机器学习工程师时,我们根本无法避免使用它。即使是后端开发人员也会处理 CSV 文件,无论是在接收数据时,还是在将其写回系统以供其他组件使用时。

由于该 csv 模块已安装在 Python 中,因此它可能是处理 CSV 文件的首选工具。若要进行一些使用 Python 处理 CSV 的实践练习,请查看我们的交互式课程《 How to Read and Write CSV Files in Python .

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部