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'