前言
由于 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
模块并定义文件名:
1
2
|
>>> import csv >>> file_name = 'movies_rating.csv' |
导入 csv
模块后,我们从指定 csv
文件中提取所有数据。为了便于操作,我们在 with
块中打开该文件,在文件使用完毕后可以自动关闭文件句柄。
使用 DictReader
可以非常方便地将数据转换为字典列表,其中标头作为键,单元格中的内容作为值,例如第一行的数据被转换为 {'User name': 1, 'Movie name': 'Star Wars', 'rating':7.8}
。
然后,我们可以操作和修改格式化后的数据。
使用 DictReader
读取文件的内容并将此内容转换为数据行的列表:
1
2
3
|
>>> with open (file_name, newline = '') as f: ... data = [row for row in csv.DictReader(f)] ... |
检查获得的数据,将文件中第一个评分记录中的评分数据从 7.8
修改为 7.9
,解决数据错误问题:
1
2
3
4
5
|
>>> 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 |
在本节中,我们通过直接访问行号来修改数据,但在通常情况下,我们可能需要首先搜索特定信息,确定相应行后再进行修改。
再次打开文件并存储修改后的数据记录:
1
2
3
4
5
6
|
>>> 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文件的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/7135663467037458468