当前位置 : 主页 > 编程语言 > python >

Python 修改CSV文件实例详解

来源:互联网 收集:自由互联 发布时间:2023-01-30
目录 前言 Python 修改CSV文件 前言 由于 CSV 文件仅仅是简单的文本文件,因此更新 CSV 文件中内容的最佳方式是首先读取文件中的数据,并将它们处理为 Python 内部对象,进行更改,然后
目录
  • 前言
  • Python 修改CSV文件

前言

由于 CSV 文件仅仅是简单的文本文件,因此更新 CSV 文件中内容的最佳方式是首先读取文件中的数据,并将它们处理为 Python 内部对象,进行更改,然后以相同的格式覆盖原始数据。

Python 修改CSV文件

在本节中,我们将学习如何使用 Python 修改 CSV 文件中的数据。

假设在CSV文件中有以下数据,其中用户 '1' 对电影 'Star Wars' 的评分有误,其实际评分为 7.9,因此需要修改此文件。

User nameMovie namerating1Star Wars7.82Back to Future82Batman7.73Spy 0078.3

首先,导入 csv 模块并定义文件名:

>>> import csv
>>> file_name = 'movies_rating.csv'

导入 csv 模块后,我们从指定 csv 文件中提取所有数据。为了便于操作,我们在 with 块中打开该文件,在文件使用完毕后可以自动关闭文件句柄。

使用 DictReader 可以非常方便地将数据转换为字典列表,其中标头作为键,单元格中的内容作为值,例如第一行的数据被转换为 {'User name': 1, 'Movie name': 'Star Wars', 'rating':7.8}

然后,我们可以操作和修改格式化后的数据。

使用 DictReader 读取文件的内容并将此内容转换为数据行的列表:

>>> with open(file_name, newline='') as f:
...     data = [row for row in csv.DictReader(f)]
...

检查获得的数据,将文件中第一个评分记录中的评分数据从 7.8 修改为 7.9,解决数据错误问题:

>>> data
[OrderedDict([('User name', '001'), ('Movie name', 'Star Wars'), ('rating', '7.8')]), OrderedDict([('User name', '002'), ('Movie name', 'Back to Future'), ('rating', '8.0')]), OrderedDict([('User name', '002'), ('Movie name', 'Batman'), ('rating', '7.7')]), OrderedDict([('User name', '003'), ('Movie name', 'Spy 007'), ('rating', '8.3')])]
>>> data[0]['rating']
'7.8'
>>> data[0]['rating'] = 7.9

在本节中,我们通过直接访问行号来修改数据,但在通常情况下,我们可能需要首先搜索特定信息,确定相应行后再进行修改。

再次打开文件并存储修改后的数据记录:

>>> header = data[0].keys()
>>> with open(file_name, 'w', newline='') as f:
...     writer = csv.DictWriter(f, fieldnames=header)
...     writer.writeheader()
...     writer.writerows(data)
...

数据修改后,我们直接覆盖原文件并使用 DictWriter 存储数据。DictWriter 需要通过声明字段名 (fieldnames=header) 来定义列上的字段,为了获得这些字段名,我们可以先读取其中一行数据字典的键并将它们存储在 header 中。

原文件以 w 模式再次打开以覆盖它。DictWriter 首先使用 writeheader 存储标头,然后通过调用 writerows() 一次存储所有行。我们也可以通过调用 writerow() 方法每次写入一行数据。

在电子表格软件中检查结果。在下图中可以看到,该文件使用 WPS 软件打开显示,可以看到第一行的评分数据已经被修改:

以上就是Python 修改CSV文件实例详解的详细内容,更多关于Python 修改CSV文件的资料请关注自由互联其它相关文章!

上一篇:Python常用工具类之adbtool示例代码
下一篇:没有了
网友评论