CSV文件简介
CSV(Comma-Separated Values,逗号分隔值),是一种纯文本形式存储表格数据的文件。该文件由任意数目的记录组成,每条记录被分隔符分隔为字段(最常见的分隔符是逗号或制表符),且每条记录都有相同的字段序列,因此csv相当于一个结构化表的纯文本形式。从直观上看,它比Excel文件更加简洁,然而它不包含诸如XLS电子表格的数值、公式和格式等内容,它仅仅为一个结构化的纯文本。
CSV文件读取和写入
在CSV文件读写操作中,常用两种读写方式是列表读写和字典读写,下面我们分别来对此进行介绍。
文件读取
csv文件读取主要是使用reader()和DictReader()方法,二者均接收一个csv文件参数,并返回一个用于文件读取迭代器。这两个方法的区别是:reader()方法获取的是一行行列表数据的迭代器,每行的数据可通过下标来获取,而DictReader()方法获取的是一行行字典数据的迭代器,每行的数据可通过键来获取。
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
| import csv
with open('data.csv', 'r') as fp: reader = csv.reader(fp) titles = next(reader) print(type(titles)) print(titles) for x in reader: print(x) id = x[0] name = x[1] city = x[2] print({'id': id, 'name': name, 'city': city})
with open('data.csv', 'r') as fp: reader = csv.DictReader(fp) for x in reader: print(type(x)) print(x) id = x['id'] name = x['name'] city = x['city'] print({'id': id, 'name': name, 'city': city})
|
文件写入
同文件读取一样,文件的写入也有两种方法——writer()和DictWriter(),其含义和reader()/DictReader()相类似,writer()用于列表数据写入,而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 26 27 28 29
| import csv
headers = ['id','name','province'] values = [ ('001','ShenZhen','GuangDong'), ('002', 'WuHan', 'HuBei'), ('003', 'ChengDu', 'SiChuan') ]
with open('citylist.csv','w',encoding='utf-8',newline='') as fp: writer = csv.writer(fp) writer.writerow(headers) writer.writerows(values)
headers = ['id', 'name', 'province'] values = [ {'id': '001', 'name': 'ShenZhen', 'province': 'GuangDong'}, {'id': '002', 'name': 'WuHan', 'province': 'HuBei'}, {'id': '003', 'name': 'ChengDu', 'province': 'SiChuan'} ] with open('citydict.csv', 'w', encoding='utf-8', newline='') as fp: writer = csv.DictWriter(fp,headers) writer.writeheader() writer.writerows(values)
|
在打开待写入CSV文件时,这里我们还传入了一个newline参数,并且其值为空字符串,这么做是为了防止在每次写完一行后其会自动再写入一个换行符,如下图为设置和不设置newline的文件写入对应结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 设置了newline的文件写入结果: “”” id,name,province 001,ShenZhen,GuangDong 002,WuHan,HuBei 003,ChengDu,SiChuan “”” 未设置newline的文件写入结果: “”” id,name,province 001,ShenZhen,GuangDong 002,WuHan,HuBei 003,ChengDu,SiChuan “””
|