爬虫中的数据保存----csv文件的保存

一. CSV的简介

csv文件格式是一种通用的电子表格和数据库导入导出格式。最近我调用RPC处理服务器数据时,经常需要将数据做个存档便使用了这一方便的格式。

python中有一个读写csv文件的包,直接import csv即可。利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下。

1. 写入文件


import csv
ll = [[1, 2, 3, 4],
		[1, 2, 3, 4],
		[5, 6, 7, 8],
		[5, 6, 7, 8]]
# newline=''  指定数据新行是一个空字符串, 不然会有数据空行
with open('example1.csv', 'w', newline='') as csvfile:
	"""
	delimiter: 分割符
	"""
	spamwriter = csv.writer(csvfile, delimiter=',')
	for l in ll:
		spamwriter.writerow([1, 2, 3, 4])


可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行。使用 newline='' 解决

2. 读取文件


import csv
with open('example.csv', encoding='utf-8') as f:
	csv_reader = csv.reader(f)
	for row in csv_reader:
		print(row)

默认的情况下, 读和写使用逗号做分隔符(delimiter),当遇到特殊情况是,可以根据需要手动指定字符, 例如:


with open('example.csv', encoding='utf-8') as f:
	reader = csv.reader(f, delimiter=',')
	for row in reader:
		print(row)

有点需要注意的是,当用writer写数据时, None 会被写成空字符串,浮点类型会被调用 repr() 方法转化成字符串。所以非字符串类型的数据会被 str() 成字符串存储。所以当涉及到 unicode 字符串时,可以自己手动编码后存储或者使用csv提供的 UnicodeWriter 。

3. 写入与读取字典

csv 还提供了一种类似于字典方式的读写


class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None,
dialect='excel'*args, **kwds)
class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise',
dialect='excel'*args, **kwds)

其中 fieldnames 指定字典的 key 值,如果 reader 里没有指定那么默认第一行的元素,在 writer 里一定要指定这个。


# %% 写
import csv
with open('names.csv', 'w') as csvfile:
	fieldnames = ['first_name', 'last_name']
	writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
	writer.writeheader()
	writer.writerow({
    
    'first_name': 'Baked', 'last_name': 'Beans'})
	writer.writerow({
    
    'first_name': 'Lovely'})
	writer.writerow({
    
    'first_name': 'Wonderful', 'last_name': 'Spam'})


# %% 读
import csv
with open('names.csv', newline='') as csvfile:
	reader = csv.DictReader(csvfile)
	for row in reader:
		print(row['first_name'], row['last_name'])

二. 列表和字典的写入

1. 列表


# 不是完整的代码,只有保存的部分

with open('猫眼-列表.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_write = csv.writer(f)
    # csv_write.writerow(['电影名字', '主演', '上映时间', '评分']) # 用csv模块写入
    f.write("电影名字,主演,上映时间,评分\n")  # 用普通文本写表头

    for div in divs:
        title = div.css('.title::text').get()
        actors = div.css('.actors::text').get()
        date = div.css('.date::text').get()
        number = div.css('.number::text').get()
        print(title, actors, date, number)

        csv_write.writerow([title, actors, date, number])

2. 字典


import csv  # 内置

list_dict = [{
    
    'first_name': 'Baked', 'last_name': 'Beans'},
             {
    
    'first_name': 'Lovely'},
             {
    
    'first_name': 'Wonderful', 'last_name': 'Spam'}]

with open('data.csv', mode='a', encoding='utf-8', newline='') as f:
    # 创建一个字典数据写入对象, 第一个参数是文件对象, 第二个参数是字典中的键
    # fieldnames 指定字典的键, 不能多不能少不能错
    csv_write = csv.DictWriter(f, fieldnames=['first_name', 'last_name'])
    # 字典数据会有专门写表头的方法
    csv_write.writeheader()

    for i in list_dict:
        csv_write.writerow(i)


猜你喜欢

转载自blog.csdn.net/m0_74459049/article/details/130307533