数据存储之文件存储(三)-CSV文件存储

原创不易,转载前请注明博主的链接地址: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编程从入门到实践 》,并对以上作者表示感谢。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。
 


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42555080/article/details/86703225