CSV文件存储
一、CSV文件概述
- CSV是Comma Separated Values称为逗号分隔值,以一种.csv结尾的文件
- CSV文件的特点(相对于Excel文件)
- 1.值没有类型,所有值都是字符串
- 2.不能指定字体颜色等样式
- 3.不能指定单元格的宽高
- 4.不能合并单元格
- 5.没有多个工作表
- 6.不能嵌入图像图表
二、CSV文件的创建
将其保存在项目文件夹中,并在pycharm中打开,出现乱码
原因:pycharm中默认编码格式为uft-8,而csv文件的编码格式是gbk
解决方法:pycharm中修改默认编码格式
File–Settings–Editor–File Encodings–Global Encoding–GBK
修改编码后
三、CSV文件的操作
(一)向CSV文件中写入数据
- 1.引入csv模块
- 2.使用open()函数创建CSV文件
- 3.借助csvwrite()函数创建writer对象
- 4.调用writer对象的writerow()方法写入一行数据
- 5.调用writer对象的writerows()方法写入多行数据
实现代码
import csv
#使用上下文管理器打开数据
with open('student.csv','a+',newline='') as file: #newline参数:去除csv文件中的空行
#创建一个write对象
writer = csv.writer(file)
#一次写一行数据
#writer.writerow(['绮梦',23,90])
#一次写入多行数据
lst = [
['Jack',23,78], #第一行
['Mary',21,96], #第二行
['Lili',20,88], #第三行
]
writer.writerows(lst)
从CSV文件中读取数据
- 1.引入csv模块
- 2.使用open()函数打开csv文件
- 3.借助csv.reader()函数创建一个reader对象
- 4.读到的每一行都是一个列表
import csv
with open('student.csv','r',newline='') as file:
#创建reader对象
reader = csv.reader(file)
for row in reader:
print(row)
['姓名', '年龄', '分数']
['张三', '22', '78']
['李四', '20', '90']
['王五', '19', '86']
[]
['绮梦', '23', '90']
['Jack', '23', '78']
['Mary', '21', '96']
['Lili', '20', '88']
Process finished with exit code 0
四、案例
将获取的京东销量最好的粽子数据当中的评论内容和事件写入CSV文件中
import requests
import csv
import json
def send_requests(): #发送请求
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1504280&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}
resp =requests.get(url,headers=headers) #发送请求
return resp.text #返回数据
def parse_json(data): #数据解析
#数据整理,去掉数据开头和结尾不符合JSON数据的格式
return data.replace('fetchJSON_comment98(','').replace(');','') #结果为str类型
def type_change(data):#数据转换
#类型转换:str-->python字典类型
return json.loads(data)
def parse_html(data):
s = data.replace('fetchJSON_comment98(','').replace(');','')
dict_data = json.loads(s)
comments_list = dict_data['comments'] #字典数据中根据键获取值,结果为列表
lst = []
for comment in comments_list: #遍历评论列表,获得评论字典
content = comment['content'] #评论字典中,以键获取值(评论内容)
creationTime = comment['creationTime'].split(' ')[0] #评论时间,按照空格分隔,只输出索引为0的数据,即日期
lst.append([content,creationTime]) #将数据存储到列表当中
save(lst)
def save(lst):
with open('粽子的评论数据.csv','w',newline='') as file:
writer = csv.writer(file)
writer.writerows(lst)
def start():#启动爬虫程序
data = send_requests()
parse_html(data)
if __name__ == '__main__':
start()
在文件中以Excel格式打开