• 数据存储和JSON,CSV


    写在前面

    文件储存的形式多种多样,最直接的就是已文本的形式保存在本地,如TXT,JSON,CSV等,也可以保存在数据库中,比如,MySQL,MongoDB,Redis等。

    一.json文件储存

    1.概念

    JSON,全称为JavaScript Object Notation,也就是JavaScript对象标记,它通过对象和数组的结合来表示数据,构造简介,但是结构化程度非常高,是一种轻量级的数据交换格式。

    数组和对象

    在JavaScript中一切切是对象,任何支持的数据类型都可以用JSON来表示,例如字符串,数字,对象,数组等,其中对象和数组比较常用。

    数组

    数组在形式上是以一对中括号包裹起来 “[ ]”,元素之间用逗号隔开,在内容上,数组可以包含任意类型。

    ["name",1233,{"name":"张三"},[1,2,3]]
    

    对象

    对象在形式上用 一对大括号 " { }"括起来,元素之间用逗号隔开,内容上是以键值对的方式存在。

    {
    "name":"Bob",
    "gender":"male",
    "dirthday":"1992-10-18"
    }
    

    JSON

    JSON可以由对象和数组任意嵌套,结构清晰。

    [{
    "name":"Bob",
    "gender":"male",
    "dirthday":"1992-10-18"
    },{
    "name":"Selina",
    "gerder":"female",
    "birthday":"1995-10-18"
    }]
    

    2.读取JSON

    我们可以用JSON库的loads()方法将JSON文本字符串转为JSON对象,可以通过dumps()方法将JSON对象转为文本字符串。

    转换字符串

    import json
    str = '''
    [{
        "name":"zhangsan",
        "gerder":"male",
        "birthday":"1998-05-12"
    },{
        "name":"lisi",
        "gerder":"femal",
        "birthday":"1995-10-18"
    }]
    '''
    print(type(str))
    data = json.loads(str)
    print(type(data))
    print(data)
    #获取第一对象的name属性
    print(data[0].get('name'))
    
    '''
    输出
    <class 'str'>
    <class 'list'>   #因为最为层是中括号,所以最终的类型为list
    [{'name': 'zhangsan', 'gerder': 'male', 'birthday': '1998-05-12'}, {'name': 'lisi', 'gerder': 'femal', 'birthday': '1995-10-18'}]
    zhangsan
    '''
    

    JSON的数据需要用双引号来包裹,不能用单引号,否则loads()方法会解析错误。

    import json
    str = '''
    [{
        'name':'zhangsan',
        'gerder':'male,
        'birthday':'1998-05-12'
    }]
    '''
    print(type(str))
    data = json.loads(str)
    

    读取本地JSON文件

    import json
    import os
    with open("./josn.json",'r') as file:
        str =  file.read()
        data = json.loads(str)
        print(data)
    
    """
    [{'name': 'zhangsan', 'gerder': 'male', 'birthday': '1998-05-12'}, {'name': 'lisi', 'gerder': 'femal', 'birthday': '1995-10-18'}]
    """
    

    3.写入JSON

    将JSON对象转换为字符串对象写入本地文件

    import json
    data = [{
        "name":"zhangsan",
        "gerder":"male",
        "birthday":"1998-05-12"
    },{
        "name":"lisi",
        "gerder":"femal",
        "birthday":"1995-10-18"
    }]
    with open("./josn.json",'w') as file:
        file.write(json.dumps(data))
    

    注释

    write()方法只能写入str类型的字符串,所以需要进行转换。

    这样写入的json文件结构不清晰,而且写入的JSON文件中如果包含了中文字符的话,会出错。

    解决

    在进行写入的时候,指encoding 为 'utf-8'

    给dumps()方法添加 indent参数(缩进)和ensure_ascii参数

    import json
    data = [{
        "name":"张三",
        "gerder":"male",
        "birthday":"1998-05-12"
    },{
        "name":"李四",
        "gerder":"femal",
        "birthday":"1995-10-18"
    }]
    with open("./josn.json",'w',encoding='utf-8') as file:
        file.write(json.dumps(data,indent=2,ensure_ascii=False,))
    

    二.SVG文件储存

    1.概念

    SVG全称为 Comma-Separated Values ,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据。 该文件是一个字符序列,可以由任意数目的记录组成,记录之间以某种换行符分隔。 每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。 它比 Excel 文件更加简介, XLS文本是电子表格,它包含了文本、数值、公式和格式等内容,而 csv 中不包含这些内容,就是特定字符分隔的纯文本,结构简单清晰。

    2.写入

    以列表的形式写入

    import csv
    with open('data.csv','w',encoding='utf-8') as csvfile:
        #初始化一个写入对象
        writer = csv.writer(csvfile)
        #写入表头
        writer.writerow(['id','name','age'])
       #写入单行
        writer.writerow(['1','张三','18'])
        writer.writerow(['2','李四','王二'])
         #写入多行
        writer.writerows([['3','王二','18'],['4','麻子','18']])
    

    注释:

    默认文本是以逗号分隔的,如果要修改,在初始化写入对象的时候,加入delimiter参数

    import csv
    with open('data.csv','w',encoding='utf-8') as csvfile:
        #初始化一个写入对象
        writer = csv.writer(csvfile,delimiter=" ")
        #写入表头
        writer.writerow(['id','name','age'])
       #写入单行
        writer.writerow(['1','张三','18'])
        writer.writerow(['2','李四','王二'])
         #写入多行
        writer.writerows([['3','王二','18'],['4','麻子','18']])
    

    以字典的形式写入

    import csv
    with open('data.csv','w',encoding='utf-8') as csvfile:
        #定义表头数据
        fieldnames = ['id','name','age']
        #初始化一个字典写入对象
        writer = csv.DictWriter(csvfile,fieldnames=fieldnames)
        writer.writeheader()
        writer.writerow({'id':'1001','name':'mike','age':20})
        writer.writerow({'id':'1002','name':'Jordan','age':20})
        writer.writerow({'id':'1003','name':'Bob','age':20})
    

    3.读取

    import csv
    with open('data.csv','r',encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            print(row)
    

    输出

    ['id name age']
    []
    ['1 张三 18']  
    []
    ['2 李四 王二']
    []
    ['3 王二 18']
    []
    ['4 麻子 18']
    []
    

    问题

    在每行数据之间都会产生一个空白的列表,这是因为在写入的时候,就产生了空白行,解决方法是在打开的时候添加参数,newline=''

    import csv
    with open('data.csv','w',encoding='utf-8',newline='') as csvfile:
        #初始化一个写入对象
        writer = csv.writer(csvfile,delimiter=" ")
        #写入表头
        writer.writerow(['id','name','age'])
       #写入单行
        writer.writerow(['1','张三','18'])
        writer.writerow(['2','李四','王二'])
         #写入多行
        writer.writerows([['3','王二','18'],['4','麻子','18']])
    

    重新读取输出

    ['id name age']
    ['1 张三 18']  
    ['2 李四 王二']
    ['3 王二 18']  
    ['4 麻子 18']
    

    摘自《Python 3网络爬虫开发实战 ,崔庆才著 ,2018.04 》

    内容有所改动

  • 相关阅读:
    jenkins配置发送邮件
    inux下rz、sz的简单安装
    Linux系统信息查看命令
    selenium元素定位
    windows下 maven+selenium+testng项目搭建(七)
    eclipse testng插件安装
    window maven安装(六)
    linux下Apache+Svn环境搭建(五)
    Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)
    Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)
  • 原文地址:https://www.cnblogs.com/lc-snail/p/13279849.html
Copyright © 2020-2023  润新知