csv
文件可以理解为简易版EXcel,是存储数据常用的格式之一,csv
模块用于读写csv格式的文件
csv格式
csv
是一种字符串文件的格式,它组织数据的语法就是在字符串之间加分隔符,即
行与行之间是加换行符
同行字符之间是加英文逗号分隔
csv
文件可以使用任意的文本编辑器(如记事本)或者Excel打开,Excel可以把文件另存为csv格式(因为Excel支持csv格式文件)
用csv格式存储数据,读写比较方便,易于实现,文件也会比Excel文件小
但csv文件缺少Excel文件本身的很多功能,比如不能嵌入图像和图表,不能生成公式
csv
是一个标准模块,不需额外安装
csv
模块读取csv文件的方式有函数 reader()
和类 DictReader
,写入csv文件的方式有函数 writer()
和类 DictWriter
两种
一、写入csv文件
writer()函数写入
函数 writer()
有两个写入方法
写入一行: writer.writerow(row)
写入多行: writer.writerows(rows)
row
必须是可迭代对象,推荐使用列表[]
rows
必须是可迭代对象,推荐使用大列表[[],[],..[]]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import csv
path = './aaaa.csv'
with open(path, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['姓名','省份']) writer.writerows([ ['小明', '河南'], ['小红', '山东'], ['小刚', '江苏'], ['小军', '安徽'] ])
|

DictWriter类写入
DictWriter
类将 字典
类型的数据写入csv文件的 行
中,即 DictWriter
类写入的数据类型必须是 字典
如果需要将 字典
类型的数据写入到csv文件中时,使用 DictWriter
类处理是一种更好的选择
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import csv
row_dict = {'姓名': '小明', '性别': '男', '省份': '河南'} rows_dict = [ {'姓名': '小刚', '性别': '男', '省份': '湖北'}, {'姓名': '小军', '性别': '男', '省份': '山东'}, {'姓名': '小红', '性别': '女', '省份': '江苏'} ]
headers = ['姓名', '性别', '省份']
path = './bbbb.csv'
with open(path, 'w', newline='', encoding='utf-8') as f: dict_Writer = csv.DictWriter(f, fieldnames=headers) dict_Writer.writeheader() dict_Writer.writerow(row_dict) dict_Writer.writerows(rows_dict)
|

二、读取csv文件
reader()函数读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import csv
path = './aaaa.csv'
with open(path, 'r', newline='', encoding='utf-8') as f: reader = csv.reader(f) for i in reader: print(i)
'''输出 ['姓名', '省份'] ['小明', '河南'] ['小红', '山东'] ['小刚', '江苏'] ['小军', '安徽'] '''
|
DictReader类读取
DictReader
类读取第一行有表头的csv文件,可以更好地反映出表头与文件内容的映射关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import csv
path = './bbbb.csv'
with open(path, 'r', newline='', encoding='utf-8') as f: dict_reader = csv.DictReader(f) header = dict_reader.fieldnames print(header) for dict in dict_reader: print(dict) print(dict['姓名'], dict['省份'])
'''输出 ['姓名', '性别', '省份'] {'姓名': '小明', '性别': '男', '省份': '河南'} 小明 男 河南 {'姓名': '小刚', '性别': '男', '省份': '湖北'} 小刚 男 湖北 {'姓名': '小军', '性别': '男', '省份': '山东'} 小军 男 山东 {'姓名': '小红', '性别': '女', '省份': '江苏'} 小红 女 江苏 '''
|
每一个字典的 键
对应csv文件中的表头, 值
对应每一行数据
提取字典中的 值
的方法 dict[键]
文件模式
r: 读取模式
w: 写入模式,该模式会清除原有数据后重新写入
a: 追加模式,在原有数据上写入
这三种模式适用于读写 文本
图片、音频是使用二进制格式保存的,那么在读取它们时至少使用 rb
、 wb
、 ab
模式

来源
官方英文教程
中文教程