zoukankan      html  css  js  c++  java
  • json和csv文件存储

    一. json

    1:基本概念

    1.1 Json和Javascript

    JSON, 全称JavaScript Object Notation,它通过对象和数组的组合来表示数据。在JavaScript中一切都是对象,因此,任何支持的类型都可以通过JSON来表示,常用的类型有数据和对象。

    JavaScript中,对象用{},例如{key1:value1, key2:value2...},数组用[],例如["jack", "hong",...]

    一个JSON对象可以写成如下,[]和{}可自由嵌套组合

    [{
            "name": "bob",
            "gender": "male",
            "birthday": "1992-10-18"
    },{
            "name": "john",
            "gender": "female",
            "birthday": "1995-10-18"
    }]

    1.2 json对象和python中字典的区别

    相同点:两者在写法上是一样的

    不同点:

    1)字典是一种数据结构,json是一种格式;

    2)字典有很多内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具备操作性

    3)json是格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,但字典就无所谓了

    python提供了json模块,可以方便的把json格式的字符串转化为python的数据结构

    2. 调用json.loads()将json文本字符串转为python中的数据结构

    2. 1 基本例子

    import json
    
    # 三个引号也是字符串 str
    = ''' [{ "name": "bob", "gender": "male", "birthday": "1992-10-18" },{ "name": "john", "gender": "female", "birthday": "1995-10-18" }] ''' print(type(str)) data = json.loads(str) print(data) print(type(data))

    输出如下

    <class 'str'>
    [{'gender': 'male', 'name': 'bob', 'birthday': '1992-10-18'}, {'gender': 'female', 'name': 'john', 'birthday': '1995-10-18'}]
    <class 'list'>

    这里使用loads()方法将json字符串转化python列表,那么可用索引获得相应值

    data[0]['name']

    data[0].get('name')  #字典都可以用get()方法来获取相应的值

    结果都是 bob,但推荐使用第二种;因为使用get()方法,即使键名不存在,也不会报错,而是返回None,如下

    data[0].get('age')
    data[0].get('age', 25)
    
    #输出如下
    None
    25  #key不存在时,返回默认值

    注意:

    变量str中的数据需要用双引号来包着,不能用单引号,否则会报错

     2.2  从文件中读取字符串内容,再用loads()转化为列表

    比如还用上面变量str中的字符串,文件名为data.json

    import json
    
    with open('data.json', 'r') as file:
        str = file.read()
        data = json.loads(str)
        print(data)

     

    3. 调用json.dumps()

    3.1 用dumps()方法将列表转化为字符串,再用write()方法写入文本

    import json
    
    data = [{
            'name' : 'bob',
            'gender': 'male',
            'birthday': '1992-10-19'
    }]
    
    with open('data.json', 'w') as file:
        file.write(json.dumps(data))

    data.json的文本内容为:[{"name": "bob", "gender": "male", "birthday": "1992-10-19"}]

    3.2  如果想保存JSON格式,可以加一个参数indent,代表缩进字符个数

    with open('data.json', 'w') as file:
        file.write(json.dumps(data, indent=2))

    得到的data.json文本内容为

    [
      {
        "name": "bob",
        "gender": "male",
        "birthday": "1992-10-19"
      }
    ]

    3.3. 有中文的情况下,需要指定ensure_ascii为False, 并且规定文件输出的编码

    with open('data.json', 'w', encoding='utf-8') as file:
        file.write(json.dumps(data, indent=2, ensure_ascii=False))

    二.  csv文件存储

    1. 一个最简单的例子

    import csv
    
    with open('data.csv', 'w') as csvfile:
        write = csv.writer(csvfile)
    
        write.writerow(['id','name','age'])
        write.writerow(['10001','Mike',20])
        write.writerow(['10002','bob',22])
        write.writerow(['10003','hong',21])

    1.1 分析

    1). 打开data.csv文件,然后指定打开的模式为写入'w',获得文件句柄csvfile;

    2). 调用csv的writer()方法初始化写入对象,传入该句柄

    3). 调用writerow()方法传入每行的数据

    运行后得到一个data.csv文件,内容如下,并且可直接用excel标准形式打开

    id,name,age
    10001,Mike,20
    10002,bob,22
    10003,hong,21

    1.2. 如果想要修改列与列之间的分隔符为空格,只需要在csv.writer()中传入delimiter参数

    writer = csv.writer(csvfile, delimiter= ' ')

    1.3. 可调用writerows()方法同时写入多行,此时参数需要为二维列表

    writer.writerows([['10001', 'Mike', 20], ['10002', 'Bob', 22], ['10003', 'hong', 21]])

    2. csv也提供了字典的写入方式

    import csv
    
    with open('data1.csv', 'w') as csvfile:
        fieldnames = ['id', 'name', 'age']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
    
        writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
        writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
        writer.writerow({'id': '10003', 'name': 'Hong', 'age': 21})

    2.1 分析下

    1)先定义三个字段,用fieldnames表示,然后将其作为参数传给DictWriter来初始化一个字典

    2)调用writeheader()方法先写入头信息

    3)调用writerow()方法传入相应字典

    2.2  写入中文

    只需要修改一行

    with open(data1.csv, 'w', encoding='utf-8') as csvfile:

     

    3. 读取

    import csv
    
    with open('data.csv', 'r', encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            print(row)
  • 相关阅读:
    ls命令设计思想
    Collection框架
    Yosemite 的问题
    mac vim的alt键无法正常映射
    Word Ladder
    vim自动补全
    Clone Graph
    C# 关于接口与基类的理解(二者的区别)
    C# 操作Excel基础篇(读取Excel、写入Excel)
    C# 随机数 Radom 循环生成同一的数字
  • 原文地址:https://www.cnblogs.com/regit/p/9324570.html
Copyright © 2011-2022 走看看