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文件处理的主要内容,如果未能解决你的问题,请参考以下文章