• 数据存储——json、CSV


    json

    JSON(JavaScript Object Notation,JS对象标记)是一种轻重量级的数据交换。它是基于ECMAScript(w3c制定的js规范)的

    一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。

    易于人阅读和编写,同时也易于机器的解析和生成,并有效地提升网络传输效率。

    JSON支持数据格式:

    1. 对象(字典):使用花括号{};

    2. 数组(列表):使用方括号[];

    3 . 整形、浮点型、布尔类型还有null类型;

    4. 字符串类型(字符串必须使用双引号,不能使用单引号)。

    多个数据之间使用逗号分开。json本质上就是一个字符串。(https://www.json.cn校验json的格式是否正确

    字典和列表转JSON

    将python对象dumps为json字符串
    import json
    persons = [
        {
            'username':'zhangsan',
            'age':18,
            'cpuntry':'China'
        },
        {
            'username': 'lisi',
            'age': 20,
            'cpuntry': 'China'
        }
    ]
    
    json_str = json.dumps(persons)
    print(type(json_str))
    print(json_str)
    """
    输出结果:
    <class 'str'>
    [{"username": "zhangsan", "age": 18, "cpuntry": "China"}, {"username": "lisi", "age": 20, "cpuntry": "China"}]
    
    """

    在python中,只有基本数据类型才能转换成JSON格式的字符串。即:int、float、 str、 list、 dic、tuple。

    将python对象dump到文件中

    persons = [
        {
            'username':'张三',
            'age':18,
            'cpuntry':'China'
        },
        {
            'username': '李四',
            'age': 20,
            'cpuntry': 'China'
        }
    ]
    
    with open('persion.json','w',encoding='utf-8') as fp:
        json.dump(persons,fp,ensure_ascii=False)

    json 在 dump 的时候,只能存放 ascil 的字符,因此会将中文进行转义,可以使用 ensure_ascii=False 关闭这个特性。(不指定编码形式会出现乱码)

    从文件中读取json:

    with open('persion.json','r',encoding='utf-8') as fp:
        json_str = json.load(fp)
        print(json_str)

    CSV 

    ‘CSV’并不是一种单一的、定义明确的格式。“CSV”泛指具有以下特征的任何文件:

    1.纯文本。使用某个字符集,比如:ASCII、Uniconde、EBCDIC或GB2312等;

    2. 有记录组成(每一行都是一条记录);

    3. 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时候分隔符可以包括可选的空格);

    4. 每条记录都有同样的字段序列。

    读取CSV文件:

    reader()

    import csv
    with open('stock.csv','r') as fp:
        reader = csv.reader(fp)
        next(reader) # 表头
        for x in reader:
            name = x[3]
            volumn = x[-1]
            print({'name':name,'volumn':volumn})

    reader()读取数据时,要通过下标获取数据。如果要通过标题获取数据,那么使用DictReader。

    with open('stock.csv','r') as fp:
        reader = csv.DictReader(fp)
    
        """
        使用DictReader创建的reader对象,不包括标题行的数据。reader是一个迭代器,遍历这个迭代器返回的是一个字典
        """
        for x in reader:
            value= {'name':x['secshortName'],
                    'volumn':x['turnoverVol']}
            print(value)


    写入数据到CSV文件

    writer有两种方法:一个是writerow,写入一行;一个是writerows,多行写入。

    headers = ['name', 'age', 'classroom']
    values = [
        ('zhangsan', 18, '111'),
        ('lisi', 20, '112'),
        ('wangwu', 21, '113')
    ]
    with open('calssinfo.csv','w',newline='') as fp:
        writer = csv.writer(fp)
        writer.writerow(headers)
        writer.writerows(values)

    也可以使用字典的方式把数据写入进去,这时候使用DictWriter。(字典的键要与标头保持一样)

    headers = ['name', 'age', 'country']
    values = [
    
            {
                'name':'张三',
                'age':18,
                'country':'China'
            },
            {
                'name': 'lisi',
                'age': 20,
                'country': 'China'
            }
    
    
    ]
    with open('calssinfo.csv','w',encoding='utf-8',newline='') as fp:
        writer = csv.DictWriter(fp,headers)
        # 写入表头数据的时候,需要调用writeheader() writer.writeheader() writer.writerows(values)
  • 相关阅读:
    Java比较两个对象的不同之处
    windows下MongoDB的安装及配置
    springboot对应的springcloud版本
    Spring注解 @Scope 详解
    https HttpUtils 绕过证书
    thymeleaf 基本使用
    java8 groupby 对多个字段进行去重, 统计 partitioningBy
    linux硬件数据
    Nginx referer防盗链模块
    Nginx HTTP 过滤addition模块(响应前后追加数据)
  • 原文地址:https://www.cnblogs.com/-hao-/p/13890085.html
Copyright © 2020-2023  润新知