写点什么

使用 Python 处理 CSV 文件,附示例

作者:前端毛小悠
  • 2023-07-21
    上海
  • 本文字数:3406 字

    阅读完需:约 11 分钟

使用 Python 处理 CSV 文件,附示例

在本文中,我们将学习如何在 CSV 文件使用 Python 读取和写入数据,以及如何将 CSV 文件转换为 JSON 格式,反之亦然。我们将探讨如何使用 csv 模块,并查看有助于理解其工作原理的示例。

CSV comma-separated values)文件是一种文本文件格式,允许以表格结构保存数据这是一种流行的格式,用于从数据库和电子表格导出和导入数据。

顾名思义,CSV 文件中的每条数据都用逗号 (,) 分隔。有时,术语“CSV”可用于描述具有其他类型分隔符的格式,例如冒号 (:)、分号 (;) 和制表符 (\t)。出于本文的目的,我们将仅处理使用逗号作为分隔符的 CSV 文件(在 RFC 4180)。

打开后,CSV 文件的内容如下所示:


Employee Id,First Name,Gender,StartDate,Last Login Time,Salary,Bonus %,Senior Management,Team1,Douglas,Male,8/6/1993,12:42 PM,,6.945,TRUE,Marketing2,Thomas,Male,3/31/1996,6:53 AM,61933,4.17,,3,Maria,Female,4/23/1993,11:17 AM,,11.858,FALSE,Finance4,Jerry,Male,3/4/2005,1:00 PM,138705,9.34,,Finance
复制代码


如上所示,逗号分隔符 , ,用于分隔文件中的每个特定数据。

第一行数据可以选择用作标题,标明其下方的每一列数据。CSV 文件通常以 .csv 文件扩展名保存。


csv 模块

由于电子表格和 数据库(例如 MS SQL) 可以作为 CSV 文件导入和导出,因此了解如何以编程方式处理以 CSV 格式提供的数据非常重要。大多数编程语言(例如 Python)都支持处理 CSV 文件,并将其转换为其他格式(例如 JSON)。

Python 提供了 csv 模块,用于以 CSV 格式 读取、写入和执行其他形式的 文件处理。内置库提供了可无缝处理 CSV 文件的函数和类。


如何使用 Python 读取 CSV 文件

csv 模块有 csv.reader() 函数可以读取 CSV 文件。它可以和对象(包括文件对象)一起使用,例如使用 Python 内置 open() 函数生成的对象。

调用open()函数生成的一个文件对象, csv.reader() 将返回一个读取器对象。读取器对象将迭代 CSV 数据的每一行,其中行作为字符串列表返回。

让我们举个例子:


import csv
with open('employees.csv', newline='') as file_obj: reader_obj = csv.reader(file_obj) for row in reader_obj: print(row)

复制代码


这是上面代码的输出:


['Employee Id','First Name','Gender', 'StartDate', 'Last Login Time', 'Salary', 'Bonus %', 'Senior Management', 'Team']['1', 'Douglas', 'Male', '8/6/1993', '12:42 PM', '', '6.945', 'TRUE', 'Marketing']['2', 'Thomas', 'Male', '3/31/1996', '6:53 AM', '61933', '4.17', '', '']['3', 'Maria', 'Female', '4/23/1993', '11:17 AM', '', '11.858', 'FALSE', 'Finance']['4', 'Jerry', 'Male', '3/4/2005', '1:00 PM', '138705', '9.34', '', 'Finance']['5', 'Larry', 'Male', '1/24/1998', '4:47 PM', '101004', '1.389', 'TRUE', 'Client Services']...
复制代码


从第一个代码片段开始, employees.csv 文件被打开,之后 csv.reader() 函数解析它并返回一个读取器对象。employees.csv 使用简单的 for 循环来迭代读取器对象,该对象从文件的每一行(从顶部开始)返回数据列表 。


如何使用 Python 写入 CSV 文件

除了从 CSV 文件读取数据之外,我们还可以用 Python 将数据写入这些文件。 csv.writer() 函数使我们能够以 CSV 格式写入数据。以写入模式打开文件后, csv.writer() 函数返回一个编写器对象,编写器对象在文件对象上将提供的数据转换为被分隔的字符串。编写器对象具有 writerow() 方法,用于写入单行数据(每次以逗号分隔的字符串或数值的可迭代值),而 writerows() 方法一次用于多行。writerow()和   writerows()方法只是将数据写入 CSV 文件的两个选项 。

上面的代码片段中使用的所有对象列表都可以组成一个 2D 列表,并作为参数传递给编写器对象的 writerows() 方法,可以实现相同的结果。

执行 with 语句后 ,将在当前工作目录中创建一个包含这些逗号分隔值的 CSV 文件 ( products.csv)。

这是一个例子:


import csvwithopen('products.csv','w', newline='')as file_obj:    writer_obj = csv.writer(file_obj)    writer_obj.writerow(['Product Name','Price','Quantity','SKU Number'])    writer_obj.writerow(['Rice',80,35,'RI59023'])    writer_obj.writerow(['Curry',2,200,'CY13890'])    writer_obj.writerow(['Milk',9.5,315,'MK10204'])
复制代码


这是上面代码的输出:


Product Name,Price,Quantity,SKU NumberRice,80,35,RI59023Curry,2,200,CY13890Milk,9.5,315,MK10204
复制代码


如何使用 Python 将 CSV 转换为 JSON

在执行文件 I/O 操作时,我们可能希望将 CSV 文件转换为 JSON 格式,这种格式常用于在客户端和服务器之间接收和传输数据。csv 模块提供了 csv.DictReader 类来帮助我们实现这一点。

 csv.DictReader 类方法将给定的 CSV 文件转换为 Python 字典,然后再应用 json 模块的 json.dump() 函数将生成的 Python 字典转换为 JSON 文件。 csv.DictReader() 类采用可选 fieldnames 参数。如果省略字段名称,则第一行中的值将作为字段名称映射到其余数据。

让我们看一个例子:


import csvimport json
my_dict = {}
with open('employees.csv', newline='') as file_obj: reader_object = csv.DictReader(file_obj) for row in reader_object: key = row['Employee Id'] my_dict[key] = row
with open('employee.json', 'w', encoding='utf-8') as file_obj: json.dump(my_dict, file_obj, indent=4)

复制代码


这是上面代码的输出:


"1": {    "Employee Id": "1",    "First Name": "Douglas",    "Gender": "Male",    "Start Date": "8/6/1993",    "Last Login Time": "12:42 PM",    "Salary": "",    "Bonus %": "6.945",    "Senior Management": "TRUE",    "Team": "Marketing"},"2": {    "Employee Id": "2",    "First Name": "Thomas",    "Gender": "Male",    "Start Date": "3/31/1996",    "Last Login Time": "6:53 AM",    "Salary": "61933",    "Bonus %": "4.17",    "Senior Management": "",    "Team": ""},...

复制代码


要将 CSV 文件转换为等效的 JSON 文件,我们使用了以下步骤:

  • 以读取模式打开 employees.csv 文件

  • 使用csv.DictReader 类从返回的文件对象创建一个 Python 字典 

  • 以写入模式打开一个 JSON 文件,例如 employees.json (如果不存在这样的文件,则会创建一个)

  • 使用 json模块dump() 函数将 Python 字典(my_dict)转换为 JSON 文件



如何使用 Python 将 JSON 转换为 CSV

在本节中,我们将了解如何将数据从 JSON 文件转换为 CSV 格式。为了实现这一点,我们将使用内置的 csv 和 json  Python 模块。json 模块的 json.load()  函数将帮助将 JSON 文件转换为 Python 字典,而 csv 模块的 csv.DictWiter 类方法将帮助将 Python 字典转换为 CSV 文件。

这是一个例子:


import csvimport json
py_dict = {}
# convert json file to python dictionarywith open('employees.json', 'r', encoding='utf-8') as file_obj: py_dict = json.load(file_obj)
# convert write python dictionary to csvwith open('employees_records.csv', 'w', newline='') as file_obj: csv_writer = csv.DictWriter(file_obj, fieldnames=py_dict['1'].keys()) csv_writer.writeheader() for key in py_dict.keys(): csv_writer.writerow(py_dict[key])

复制代码


要将 JSON 文件转换为 CSV 等效文件,我们使用了以下步骤:

  • 以读取模式打开 employees.json 文件

  • 使用 json.load() 函数创建 Python 字典 py_dict

  • 以写入模式打开一个 CSV 文件 employees_records.csv (如果不存在此类文件,则会创建一个)

  • 使用类csv.DictWriter 创建了一个带有必要参数的编写器对象 


  • 使用编写器对象方法将字典映射到适当的行数


结论

CSV 文件非常流行,经常用于导出和导入电子表格和数据库。处理数据的人员经常使用这种文件格式。然而,在使用 Python 编程时,可能需要快速使用 CSV 文件,因此了解如何使用 CSV 执行文件 I/O 操作非常重要。

Python 的 csv 模块对于处理 CSV 文件非常方便,因为它为此类任务提供了必要的函数和类。

还需要注意的是,我们可能需要将文件从一种格式转换为另一种格式(CSV 到 JSON),如上面的示例所示。

用户头像

还未添加个人签名 2020-12-30 加入

还未添加个人简介

评论

发布
暂无评论
使用 Python 处理 CSV 文件,附示例_Python_前端毛小悠_InfoQ写作社区