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

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

使用 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,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


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

第一行数据可以选择用作标题,标明其下方的每一列数据。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 csvwithopen('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 Number
Rice,80,35,RI59023
Curry,2,200,CY13890
Milk,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 csv
import json
my_dict ={}withopen('employees.csv', newline='')as file_obj:
    reader_object = csv.DictReader(file_obj)for row in reader_object:
        key = row['Employee Id']
        my_dict[key]= rowwithopen('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 格式。为了实现这一点,我们将使用内置的 csvjson  Python 模块。json 模块的json.load() 函数将帮助将 JSON 文件转换为 Python 字典,而 csv 模块的 csv.DictWiter 类方法将帮助将 Python 字典转换为 CSV 文件

这是一个例子:


import csv
import json
py_dict ={}# convert json file to python dictionarywithopen('employees.json','r', encoding='utf-8')as file_obj:
    py_dict = json.load(file_obj)# convert write python dictionary to csvwithopen('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),如上面的示例所示。



相关文章
|
20天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
37 7
|
25天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
64 8
|
1月前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
51 11
|
2月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
57 6
|
3月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
2月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
86 2
|
3月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
117 1
Python实用记录(十三):python脚本打包exe文件并运行
|
2月前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
26 1
|
2月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
3月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。