原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080
本次代码的环境:
运行平台: Windows
Python版本: Python3.x
IDE: PyCharm
一 概述
这篇文章主要讲解的是CSV文件存储,主要分为数据的写入,这里面又可以分为结构化数据-字典的写入,一维列表数据的写入、二位列表数据的写入,还会讲解CSV数据的读取。
CSV,全称为Comma-Separated Values, 逗号分隔值,(有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。
OK,enough talk,let’s study!!!
二 CSV文件写入
Python专门提供了csv库用来读取和写入csv文件。
2.1 结构化数据字典(dict)的写入方式
这里现讲解的内容是结构化数据字典(dict)的写入方式,因为网络爬虫爬取的都是结构化数据,通常都是用字典类型表示。csv库中提供的字典写入方式如下实例:
import csv
with open('data.csv','w') as file:
fieldnames = ['index', 'image', 'title', 'actor', 'time', 'score']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'index': '98', 'image': 'https://p1.meituan.net/movie/a1634f4e49c8517ae0a3e4adcac6b0dc43994.jpg@160w_220h_1e_1c','title': '迁徙的鸟', 'actor': '雅克·贝汉,Philippe Labro', 'time': '2001-12-12(法国)', 'score': '9.1'})
writer.writerow({'index': '99', 'image': 'https://p0.meituan.net/movie/885fc379c614a2b4175587b95ac98eb95045650.jpg@160w_220h_1e_1c','title': '阿飞正传', 'actor': '张国荣,张曼玉,刘德华', 'time': '2018-06-25', 'score': '8.8'})
writer.writerow({'index': '100', 'image': 'https://p0.meituan.net/movie/c304c687e287c7c2f9e22cf78257872d277201.jpg@160w_220h_1e_1c','title': '龙猫', 'actor': '帕特·卡洛尔,蒂姆·达利,丽娅·萨隆加', 'time': '2018-12-14', 'score': '9.2'})
结果如下图所示:
这里用fieldnames定义了6个字段,然后把他传给DictWriter来初始化一个字典写入对象,接着可以调用writeheader()方法先写人头信息,然后再调用writerow()方法传人相应字典即可。另外一般在网站爬虫的过程中都是追加写入的方式,所以可以将打开模式改为“a”,也就是open()函数的第二个参数改为a。还有提供要写入中文内容的话,可能会遇到字符编码问题,此时需要在open()参数指定编码格式,如encoding = ‘utf-8’,代码如下:
import csv
with open('data.csv','a',encoding = 'utf-8') as file:
fieldnames = ['index', 'image', 'title', 'actor', 'time', 'score']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'index': '98', 'image': 'https://p1.meituan.net/movie/a1634f4e49c8517ae0a3e4adcac6b0dc43994.jpg@160w_220h_1e_1c','title': '迁徙的鸟', 'actor': '雅克·贝汉,Philippe Labro', 'time': '2001-12-12(法国)', 'score': '9.1'})
2.2 一维列表的写入
还是通过简单的例子展示:
import csv
with open('data.csv','w') as file:
writer = csv.writer(file)
writer.writerow(['id','name','sex'])
writer.writerow(['01','张三','男'])
writer.writerow(['02','李四','女'])
首先还是先打开data.csv文件,通过csv.writer()定义一个写入对象,通过writerow()函数传入每行的数据写即完成数据的写入,展示的结果如下:
‘id’,‘name’,‘sex’
‘01’,‘张三’,‘男’
‘02’,‘李四’,‘女’
当然也可以通过修改列与列之间的分隔符,可以在csv.writer()函数中传入delimiter参数,通过定义参数分隔符来实现此功能,代码如下:
import csv
with open('data.csv','w') as file:
writer = csv.writer(file,delimiter = '$')
writer.writerow(['id','name','sex'])
writer.writerow(['01','张三','男'])
writer.writerow(['02','李四','女'])
这段代码中的delimiter参数值为$,展示的结果如下:
‘id’ $‘name’ $‘sex’
‘01’ $‘张三’ $‘男’
‘02’ $‘李四’ $‘女’
2.3 二维列表的写入
当调用writerows()方法同时写入多行,此时的参数就需要为二位列表,代码如下:
import csv
with open('data.csv','w') as file:
writer = csv.writer(file)
writer.writerow(['id','name','sex'])
writer.writerows([['01','张三','男'],['02','李四','女'],['03','王二麻子','男']])
这里面一定要注意的是多行写入的函数是writerows()而不是writerow(),j结果展示如下图。
‘id’,‘name’,‘sex’
‘01’,‘张三’,‘男’
‘02’,‘李四’,‘女’
‘03’,‘王二麻子’,‘男’
三 CSV文件读取
csv数据读取同样也是根据csv库来进行操作的。如将刚才那个电影信息的数据读取出来,代码如下:
import csv
with open('data.csv','r',encoding = 'utf-8') as file:
reader = csv.reader(file)
for row in reader:
print(row)
构造Reader对象,通过遍历对象,输出每行内容,每行都是一个列表形式。因为csv文件中包含中文,所以指定的encoding是utf-8编码。
四 总结
这篇文章主要介绍了:csv文件存储相关内容,包括写入csv文件:一维列表、二位列表、结构化数据的字典写入等,还有csv文件的读取等内容。以上内容参考资料:崔庆才《Python3 网络爬虫开发实战》,夏敏捷《Python程序设计-从基础到开发》,[挪]芒努斯·利·海特兰德(Magnus Lie Hetland)《Python基础教程第3版 Python编程从入门到实践 》,并对以上作者表示感谢。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。