Python 修改CSV文件
盼小辉丶 人气:2前言
由于 CSV
文件仅仅是简单的文本文件,因此更新 CSV
文件中内容的最佳方式是首先读取文件中的数据,并将它们处理为 Python
内部对象,进行更改,然后以相同的格式覆盖原始数据。
Python 修改CSV文件
在本节中,我们将学习如何使用 Python
修改 CSV
文件中的数据。
假设在CSV文件中有以下数据,其中用户 '1
' 对电影 'Star Wars
' 的评分有误,其实际评分为 7.9
,因此需要修改此文件。
User name | Movie name | rating |
---|---|---|
1 | Star Wars | 7.8 |
2 | Back to Future | 8 |
2 | Batman | 7.7 |
3 | Spy 007 | 8.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
软件打开显示,可以看到第一行的评分数据已经被修改:
加载全部内容