json和pickle模块
json模块
json模块: 是一个序列化模块。 json: 是一个 “第三方” 的特殊数据格式。
可以将python数据类型 ----》 json数据格式 ----》 字符串 ----》 文件中
其他语言要想使用python的数据: 文件中 ----》 字符串 ----》 json数据格式 ----》 其他语言的数据类型。
注意: 在json中,所有的字符串都是双引号
元组比较特殊:
python中的元组,若将其转换成json数据,内部会将元组 ---> 列表
set是不能转换成json数据
为什么要使用json:
-
为了让不同的语言之间数据可以共享。
PS: 由于各种语言的数据类型不一,但长相可以一样, 比如python不能直接使用其他语言的数据类型, 必须将其他语言的数据类型转换成json数据格式, python获取到json数据后可以将json转换成pyton的数据类型
如何使用: import json - json.dumps: json.dumps(), f = open() --> f.write() # 序列化: python数据类型 ---》 json ---》 字符串 ---》 json文件中 - json.loads: f = open(), str = f.read(), json.loads(str) # 反序列化: json文件中 --》 字符串 ---》 json ---》 python或其他语言数据类型 - json.dump(): # 序列化: python数据类型 ---》 json ---》 字符串 ---》 json文件中 - 内部实现 f.write() - json.load(): # 反序列化: json文件中 --》 字符串 ---》 json ---》 python或其他语言数据类型 - 内部实现 f.read() - dump, load: 使用更方便 注意: 保存json数据时,用.json作为文件的后缀名
import json # 列表 # list1 = ['123', '321'] list1 = ['张全蛋', '李小花'] # dumps: 将python数据 ---》 json数据格式 ---》 字符串 # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据 json_str = json.dumps(list1, ensure_ascii=False) print(json_str) print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据 python_data = json.loads(json_str) print(python_data) print(type(python_data)) # list # 元组 tuple1 = ('张全蛋', '李小花') # dumps: 将python数据 ---》 json数据格式 ---》 字符串 # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据 json_str = json.dumps(tuple1, ensure_ascii=False) print(json_str) print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据 python_data = json.loads(json_str) print(tuple(python_data)) print(type(tuple(python_data))) # list # 字典 dic = { 'name': 'tank', 'age': 17 } # dumps: 将python数据 ---》 json数据格式 ---》 字符串 # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据 json_str = json.dumps(dic, ensure_ascii=False) print(json_str) print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据 python_data = json.loads(json_str) print(python_data) print(type(python_data)) # dict # 注意: 集合是不能被序列化成json set1 = { 1, 2, 3, 4, 5 } # dumps: 将python数据 ---》 json数据格式 ---》 字符串 # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据 json_str = json.dumps(set1, ensure_ascii=False) print(json_str) print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据 python_data = json.loads(json_str) print(python_data) print(type(python_data)) # dict # 注册功能: def register(): username = input('请输入用户名:').strip() password = input('请输入密码:').strip() re_password = input('请确认密码:').strip() if password == re_password: # [username, password] # {'name': username, 'pwd': password} user_dic = { 'name': username, 'pwd': password } json_str = json.dumps(user_dic, ensure_ascii=False) # 开始写入文件中 # 注意: 保存json数据时,用.json作为文件的后缀名 with open('user.json', 'w', encoding='utf-8') as f: f.write(json_str) register() #dump, load import json user_dic = { 'username': 'tank', 'password': 123 } f = open('user2.json', 'w', encoding='utf-8') json.dump(user_dic, f) f.close() with open('user3.json', 'w', encoding='utf-8') as f: json.dump(user_dic, f) with open('user3.json', 'r', encoding='utf-8') as f: user_dic = json.load(f) print(user_dic) print(type(user_dic))
-
pickle模块: pickle是一个python自带的序列化模块。
优点: - 可以支持python中所有的数据类型 - 可以直接存 "bytes类型" 的数据,pickle存取速度更快
缺点: (致命的缺点)
-
只能支持python去使用,不能跨平台
import pickle set1 = { 'tank', 'sean', 'jason', '大脸' } # 写 dump with open('teacher.pickle', 'wb') as f: pickle.dump(set1, f) # 读 load with open('teacher.pickle', 'rb') as f: python_set = pickle.load(f) print(python_set) print(type(python_set))
-