美文网首页
【第46天】python全栈从入门到放弃

【第46天】python全栈从入门到放弃

作者: 36140820cbfd | 来源:发表于2019-08-03 16:34 被阅读0次

1.json序列化模块

列表,元组,字符串都属于序列,可以通过索引来获取值的就是广义上的序列。python序列化模块讲的序列化主要针对字符串,就是把字典,列表,数字,对象转为字符串的过程,就是序列化。为什么要进行序列化?第一种情况,要把内容写进网络,需要序列化,第二种情况,需要进行网络传输。

2.json.dumps()的使用,把字典,列表,数字序列化为字符串.

代码块
import json

dict={'name':'wangsiyu','age':18}

str_dict=json.dumps(dict)

print(str_dict,type(str_dict))   #{"name": "wangsiyu", "age": 18} <class 'str'>

3.json.loads()反序列化

代码块
import json

dict = {'name': 'wangsiyu', 'age': 18}

str_dict = json.dumps(dict)

res = json.loads(str_dict)

print(res, type(res))     #{'name': 'wangsiyu', 'age': 18} <class 'dict'>

4.json.dump()把字典,列表,数字,对象写入文件

代码块

import json

dic = {'aaa':'bbb','ccc':'ddd'}

with open('json_dump2','w') as f:
    
    json.dump(dic,f)

5.json.load()把文件中的东西读取出来

代码块
import json

with open('json_dump2','r') as f:

    res=json.load(f)

    print(res)   #{'aaa': 'bbb', 'ccc': 'ddd'}

6.json格式的限制:1,json格式的key必须是字符串数据类型,json格式中的字符串只能是""双引号

7.如果是数字为key,那么dump之后会强行转成字符串数据类型,反序列化后数字key也是有引号的。

代码块
import json

dic = {1:2,3:4}
str_dic = json.dumps(dic)
print(str_dic)    #{"1": 2, "3": 4}
new_dic = json.loads(str_dic)
print(new_dic)   #{'1': 2, '3': 4}

7.json是否支持元组,对元组做value的字典会把元组强制转换成列表

代码块
import json

dic = {'abc':(1,2,3)}
str_dic = json.dumps(dic)
print(str_dic)    #{"abc": [1, 2, 3]}
new_dic = json.loads(str_dic)
print(new_dic)    #{'abc': [1, 2, 3]}

8.json是否支持元组做key,不支持

代码块
dic = {(1,2,3):'abc'}
str_dic = json.dumps(dic)  # 报错

9. 对列表进行dumps()和loads()

代码块
import json

# 对列表的dump
lst = ['aaa',123,'bbb',12.456]
with open('json_demo','w') as f:
    json.dump(lst,f)
with open('json_demo','r') as f:
    ret = json.load(f)
    print(ret)   #['aaa', 123, 'bbb', 12.456]

10. 能不能多次dump数据到文件里,可以多次dump但是不能load出来了

代码块
import json


dic = {'abc':(1,2,3)}
lst = ['aaa',123,'bbb',12.456]
with open('json_demo','w') as f:
    json.dump(lst,f)
    json.dump(dic,f)
with open('json_demo') as f:
    ret = json.load(f)
    print(ret)

11.多次dump数据到文件里,写文件记得加上换行符‘\n’

代码块
import json

# 想dump多个数据进入文件,用dumps
dic = {'abc':(1,2,3)}
lst = ['aaa',123,'bbb',12.456]
with open('json_demo','w') as f:
    str_lst = json.dumps(lst)
    str_dic = json.dumps(dic)
    f.write(str_lst+'\n')
    f.write(str_dic+'\n')

with open('json_demo') as f:
    for line in f:
        ret = json.loads(line)
        print(ret)

12.中文格式的序列化与反序列化 ensure_ascii = False

代码块
import  json

dic = {'abc':(1,2,3),'country':'中国'}
ret = json.dumps(dic,ensure_ascii = False)
print(ret)    #{"abc": [1, 2, 3], "country": "中国"}
#反序列化
dic_new = json.loads(ret)
print(dic_new)     #{'abc': [1, 2, 3], 'country': '中国'}
#
with open('json_demo','w',encoding='utf-8') as f:
    json.dump(dic,f,ensure_ascii=False)

13. json的其他参数,是为了用户看的更方便,但是会相对浪费存储空间

代码块
import json


import json
data = {'username':['李华','二愣子'],'sex':'male','age':16}
json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
# sort_keys表示排序,indent表示缩进量,separators表示分隔
print(json_dic2)
别跑,点个赞再走

相关文章

网友评论

      本文标题:【第46天】python全栈从入门到放弃

      本文链接:https://www.haomeiwen.com/subject/zcpjdctx.html