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还有不少的体会,期待下次博客分享.

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值