python学习笔记1--json文件处理

Posted 鸿_H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记1--json文件处理相关的知识,希望对你有一定的参考价值。

背景:大批量处理json文件,认真考虑,还是选择python来搞比较方便。

环境:ubuntu20.04 python3 jupyter

前言:python处理json文件,除了读写常规操作之外,for-range(len())方式找到json里面特定成员这一思路很值得使用.如有理解错误地方,望大大们不吝赐教.

1、json中的,[]

: 里面逗号分开的是成对的元素 key:value
[] : 里面逗号分开存放的是value,而且是其key的多个value情况才用到[]

个人理解,不需要配对描述时候,用[]即可,需要配对描述时候使用。注意层次上划分key与value关系,这对于遍历时很关键。

可作为一个value成员放置在[]中作为value一部分;而[]也可作为某一个key成员的value值存在。这里有点绕口,需要细细体会。

2、行方式读取json文件,追加方式添加文件,遍历获取成员方式

1.json文件内容:

"point":["x":3,"y":1,"x":-12,"y":-1],"index":0
"point":["x":2,"y":5,"x":7,"y":8],"index":1

2.json文件内容:

"point":["x":3,"y":1,"x":-12,"y":-1],"index":0

3.json文件内容:
(空,一开始为空文件)

import json

json_path_1 = '/home/ylh/python_ws/data/1.json'
json_path_2 = '/home/ylh/python_ws/data/2.json'
json_path_3 = '/home/ylh/python_ws/data/3.json'

# data = []
def test_1():
    with open(json_path_1,'r') as fp:
        for i in fp.readlines():#行方式遍历json文件,i表示的是一行内容,并不是数字i
            # print(type(i))
            data = json.loads(i)#loads针对的是内存对象.上面的已经加载文件进来(如果直接操作文件对象,会报错)到内存
            # print(type(data))
            for j in range(len(data['point'])):#这里加载的data是一行元素,dict字典类型的
                print(data['point'][j]['x'])
            
def test_2():
    data_f = json.load(open(json_path_2,'r'))#load操作对象主要是文件,直接打开路径打开就行
    #操作key值为point的指定的序号的对象value集合,并且依次进行访问.注意操作某个key值对应value集合,range(len())组合是个好东西
    #总之,对应key,可以使用['xxx']来指定,对于key对应的value,可以使用这里介绍的方式range(len())组合来读取
    #无论有多少层的key-value,注意层层剥离进行操作即可,key可直接指定,value可for循环迭代找到
    for i in range(len(data_f['point'])):
        print(data_f['point'][i])
    
    #如果想要操作某一个key对应的指定的value成员的特定值,如想输出point下面的第二个点的y坐标值
    for i in range(len(data_f['point'])):
        if i ==1:
            print(data_f['point'][i]['y'])

def test_3():
    #行方式追加内容添加json文档里面
    new_dict = 'point':['x':1,'y':3,'x':5,'y':9],'index':3#构建将要存储的内容
    json.dump(new_dict,open(json_path_3,'a'))#a表示追加方式写入文件,注意这里使用的dump是不带s,操作的是文件
    #介绍一个dump与dumps的区别,dump是把构建的内容写到文件里面,操作对象是文件; 而dumps是把构建的内容转换格式(dict->string),操作对象是内存
    print("new_dict type =",type(new_dict))
    new_dict_ = json.dumps(new_dict)
    print("new_dict_ type =",type(new_dict_))

if __name__ == "__main__":
    test_1()
    test_2()
    test_3()

3.小结

1)load与loads区别:load操作的是文件;loads操作的是已经加载到内存里面的json内容
2)dump与dumps区别:类似上面,dump操作的是文件;dumps只在内存上面操作,转换数据格式
3)获取某一值,关键理解key:value组合层次归属.对于key,直接[‘x_key_name’]进行索引;对应value,可以采用for+range(len(x_key_name))方式进行遍历获取想要的成员数值
3)追加方式添加json内容时,只是连续追加,内容间没有分隔符号,下次尝试写入内容时,添加换行符.

python处理json还有不少的体会,期待下次博客分享.

#####################
不积硅步,无以至千里
好记性不如烂笔头

以上是关于python学习笔记1--json文件处理的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记六:文件处理

Python学习笔记--音频处理

Python 2.7 学习笔记 中文处理

Python学习笔记(异常处理)

Head First Python 学习笔记-Chapter3:文件读取和异常处理

python3学习笔记 错误处理