目录
数据存储
文件存储的形式多种多样,可以保存为txt纯文本形式,还可以保存为JSON、CSV格式等
CSV文件存储
CSV,全称为Comma-Separated Values,中文叫做逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据。
下面介绍如何读取和写入CSV文件
写入CSV文件
看一个简单的例子:
import csv
with open ("data.csv",'w') as csvfile:
writer=csv.writer(csvfile)
writer.writerow(['num','name','score'])
writer.writerow(['1','xyk','99'])
writer.writerow(['2','ljb','86'])
writer.writerow(['3','zmh','96'])
首先打开data.csv文件,指定打开方式为w(写入模式),调用csv库的writer()方法初始化写入对象,调用writerow()方法传入每行的数据。运行后就会生成一个名为data.csv的文件,用Excel打开如图:
如果想要修改分隔符,可以传入delimiter参数。
代码如下:
import csv
with open ("data1.csv",'w') as csvfile:
writer=csv.writer(csvfile,delimiter=' ')
writer.writerow(['num','name','score'])
writer.writerow(['1','xyk','99'])
writer.writerow(['2','ljb','86'])
writer.writerow(['3','zmh','96'])
初始化写入对象时传入delimiter为空格,这样每一行就是以空格为分隔,如果想以其他字符为分隔,也可以用delimiter参数传入。
以text打开如下:
而且我们可以用writerows()方法写入多行
例如:
import csv
with open ("data2.csv",'w') as csvfile:
writer=csv.writer(csvfile,delimiter=' ')
writer.writerows([['num','name','score'],['1','xyk','99'],['2','ljb','86'],['3','zmh','96']])
结果是相同的。
但一般情况下,爬虫爬取的都是结构化数据,我们一般用字典表示,而CSV库也提供了字典的写入方式,如下:
import csv
with open ("data1.csv",'w') as csvfile:
fieldnames=['num','name','score']
writer=csv.DictWriter(csvfile,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'num':'1','name':'xyk','score':'99'})
writer.writerow({'num':'2','name':'zmh','score':'78'})
writer.writerow({'num':'3','name':'ljb','score':'89'})
定义三个字段,用fieldnames表示,然后用DictWriter初始化一个字典写入对象,调用writeheader()方法写入头信息,再调用writerow()方法传入字典。最终结果与上面都是相同的。
我们还可以追加写入,只需修改文件的打开模式,即将open中第二个参数改成a。
如果我们想要写入中文内容的话,可能会遇到字符编码的问题,我们只需要在open()中给参数指定编码格式,如下:
import csv
with open ("data3.csv",'w',encoding='utf-8') as csvfile:
fieldnames=['num','name','score']
writer=csv.DictWriter(csvfile,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'num':'1','name':'张伟','score':'99'})
writer.writerow({'num':'2','name':'zmh','score':'78'})
writer.writerow({'num':'3','name':'ljb','score':'89'})
运行结果:
读取
我们同样可以利用csv库将刚才写入的文件内容读取出来:
import csv
with open ("data.csv",'r',encoding='utf-8') as csvfile:
reader=csv.reader(csvfile)
for row in reader:
print(row)