博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python爬虫学习笔记7】CSV文件存储
阅读量:7281 次
发布时间:2019-06-30

本文共 3012 字,大约阅读时间需要 10 分钟。

CSV文件简介

CSV(Comma-Separated Values,逗号分隔值),是一种纯文本形式存储表格数据的文件。该文件由任意数目的记录组成,每条记录被分隔符分隔为字段(最常见的分隔符是逗号或制表符),且每条记录都有相同的字段序列,因此csv相当于一个结构化表的纯文本形式。从直观上看,它比Excel文件更加简洁,然而它不包含诸如XLS电子表格的数值、公式和格式等内容,它仅仅为一个结构化的纯文本。

如下图分别为csv文本打开方式和Excel打开方式的内容,其第0行为记录标题,而后的若干行为所记录的数据:

CSV文件读取和写入

在CSV文件读写操作中,常用两种读写方式是列表读写和字典读写,下面我们分别来对此进行介绍。

1.文件读取

csv文件读取主要是使用reader()和DictReader()方法,二者均接收一个csv文件参数,并返回一个用于文件读取迭代器。这两个方法的区别是:reader()方法获取的是一行行列表数据的迭代器,每行的数据可通过下标来获取,而DictReader()方法获取的是一行行字典数据的迭代器,每行的数据可通过键来获取。

##CSV文件读取的两种方式import csv# 列表读取with open('data.csv', 'r') as fp:    reader = csv.reader(fp)   #返回读取迭代器    titles = next(reader)     #提取出文件记录标题    print(type(titles))       #
print(titles) #['id', 'name', 'city'] for x in reader: #遍历向下迭代 print(x) #['001', 'Mike', 'Beijing']... id = x[0] name = x[1] city = x[2] print({
'id': id, 'name': name, 'city': city}) #{'id': '001', 'name': 'Mike', 'city': 'Beijing'}# 字典读取with open('data.csv', 'r') as fp: reader = csv.DictReader(fp) #迭代器,但不包含标题数据(第0行) for x in reader: print(type(x)) #
print(x) #OrderedDict([('id', '001'), ('name', 'Mike'), ('city', 'Beijing')])... id = x['id'] name = x['name'] city = x['city'] print({
'id': id, 'name': name, 'city': city}) #{'id': '001', 'name': 'Mike', 'city': 'Beijing'}

2.文件写入

同文件读取一样,文件的写入也有两种方法——writer()和DictWriter(),其含义和reader()/DictReader()相类似,writer()用于列表数据写入,而DictWriter()用于字典数据写入。二者使用方法也比较简单,但需要注意的是由于是写入文件,需要指明文件的编码方式(特别是需要写入中文字符时),具体的用法如下所示。

##CSV文件写入的两种方式import csv# 列表写入# 设置记录标题(列表)和记录值(一个嵌套元组集或列表集的列表)headers = ['id','name','province']values = [    ('001','ShenZhen','GuangDong'),    ('002', 'WuHan', 'HuBei'),    ('003', 'ChengDu', 'SiChuan')]# 使用open函数时设置参数encoding以防止乱码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的文件写入对应结果:

设置了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

 

“””

 


以上便是关于CSV文件的简单介绍和基本的读写方法,在读写方法中又含有列表和字典两种类型的读写方式,而具体使用哪一种方式就需要我们根据实际拟存储的数据类型来进行选择了。

转载于:https://www.cnblogs.com/Unikfox/p/9692069.html

你可能感兴趣的文章
ElasticSearch集群入门
查看>>
工信部发文要求加快NB-IoT落地:到2020年建成基站150万个, 实现连接数超6亿
查看>>
嵌入式开发-lesson5-简单Linux配置
查看>>
设计模式(四):单例模式与工厂模式
查看>>
Linux监控软件之 Nagios
查看>>
一文读懂柔性机器人,看似“柔若无骨”的背后有哪些黑科技
查看>>
任正非谈人工智能,AI需要的是“高质量”数据
查看>>
Linux IO多路复用之epoll网络编程(含源码)
查看>>
GCC笔记(警告.优化以及调试选项)
查看>>
MyBatis-多对一查询
查看>>
SpringMVC解析4-DispatcherServlet逻辑脉络
查看>>
最简单的读文本文件
查看>>
Ubuntu下搭建sun-jdk和Maven2
查看>>
zabbix数据库备份
查看>>
Virtual PC 2007下虚拟机与本机双XP系统实现互联与上网详解
查看>>
css中display设置为table、table-row、table-cell后的作用及其注意点
查看>>
Linux学习笔记
查看>>
帝国CMS网站管理系统安装方法图文教程
查看>>
Domino 8.5 迁移步骤-看图说话
查看>>
Openssl及加密解密(二)openssl
查看>>