python学习 Day46 数据存储-CSV文件存储11

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格式打开
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ShengXIABai/article/details/116043794
今日推荐