序列化模块

json模块

jason模块是一个序列化模块

​ 是一个第三方的特殊数据格式,在json中,所有字符串都是双引号。

python中的元组若转换成json数据,内部会将元组变为列表

set集合不能转换成json数据

为什么要使用json:让不同的语言之间的数据可以共享

使用方法:

-json.dumps()

json.dumps() , f = open() --->f.write()

序列化:python数据类型----->json ---->字符串----->文件中

-json.loads()

f = open(), str = f.read(), json.loads(str)

反序列化:json文件中----->字符串----->json----->python或其他语言数据类型

-json.dump():在内部实现f.write()

-json.load():在内部实现f.read()

dump 和 load使用更方便

在保存json数据时,用.json作为文件后缀名

import json
#列表
#json.dumps() python数据--->json数据格式--->字符串
list1 = ['1','2','3']
list2 = ['赵铁柱','小花']
json_str1 = json.dumps(list1)
#ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的bytes类型数据
json_str2 = json.dumps(list2,ensure_ascii=False)
print(json_str1) ---->["1", "2", "3"]
print(json_str2) ---->["赵铁柱", "小花"]
print(type(json_str1)) --->'str'

#json.loads()字符串--->json数据格式 ---->python数据
python_data = json.loads(json_str2)
print(python_data)---->['赵铁柱', '小花']
print(type(python_data))---->'list'


#元组
#序列化
tuple1 = ('篮球','足球')
json_str = json.dumps(tuple1,ensure_ascii=False)
print(json_str) ---->["篮球", "足球"]
print(type(json_str))---->'str'
#反序列化
python_data = json.loads(json_str)
print(python_data)---->['篮球', '足球']
print(type(python_data))---->'list'


#字典
#序列化
dict1 = {
    'name':'qqq',
    'age':17
}
json_str = json.dumps(dict1,ensure_ascii=False)
print(json_str)---->{"name": "qqq", "age": 17}
print(type(json_str))---->'str'
#反序列化
python_data = json.loads(json_str)
print(python_data)---->{'name': 'qqq', 'age': 17}
print(type(python_data))---->'dict'


#注册功能
def register():
	username = input('input your username:').strip()
    password = input('input your password:').strip()
    r_password = input('confirm password:').strip()
    if password == r_password:
        #[username,password]
        #{'name':username,'pwd':password}
        user_dict={
            'name':username,'pwd':password
        }
        json_str = json.dumps(user_dict,ensure_ascii=False)
        #将数据写入文件,保存json数据时用.json作为后缀名
        with open('user.json','w',encoding= 'utf-8')as	f:
            f.write(json_str)

            
register()


#使用json.dump()  json.load()
import json
def register():
    user_dict ={
        'username':'lzn',
        'password':123
    }
    # f = open('user2.json','w',encoding= 'utf-8')
    # json.dump(user_dict,f)
    # f.close
    with open('user3.json', 'w', encoding='utf-8')as f:
        json.dump(user_dict, f)

register()

# 读取json数据文件
with open('user3.json', 'r', encoding='utf-8')as f:
    user_dict = json.load(f)
    print(user_dict)---->{'username': 'lzn', 'password': 123}
	

pickle模块

pickle是python自带的序列化模块

优点:可以支持python中所有数据类型,可以直接存‘bytes类型‘的数据,pickle的存取速度更快

缺点:只能支持python使用,不能跨平台

import pickle
set1 = {
    'qqq','lll','nnn'
}
#dump
with open('n.pickle','wb')as f:
    pickle.dump(set1,f)
#load
with open('n.pickle','rb')as f:
    python_data = pickle.load(f)
    print(python_data)---->{'lll', 'nnn', 'qqq'}
    print(type(python_data))---->'set'

原文地址:https://www.cnblogs.com/littleb/p/11892269.html