json & pickle
json & pickle
json:一般用于不同的程序语言之间的序列化与反序列化,它的核心就是字符串,是字符串和python的基本数据类型之间的转换
json模块提供了四个功能:dumps, dump(序列化, 存), loads(反序列化, 读), load
#json本身就是字符串 import json # 将字符串解释成了字典,更方便操作 里面必须是双引号 # json.loads用于将字典,列表,元组形式的字符串,转换成相应的字典,列表,和元组 s = '{"status":1002,"desc":"invilad-citykey"}' # 将字符串解释成了列表,更方便操作 l = '[11,22,33,44]' result = json.loads(s) print(result, type(result)) ''' {'status': 1002, 'desc': 'invilad-citykey'} <class 'dict'> ''' result1 = json.loads(l) print(result1,type(result1)) ''' [11, 22, 33, 44] <class 'list'> ''' # json.dumps将python基本数据类型转换成所有程序语言都认识的字符串,不强制双引号 user_list = ['alex', "eric", 'tony'] s = json.dumps(user_list) print(s, type(s)) ''' ["alex", "eric", "tony"] <class 'str'> ''' # json.dump 将python基本数据类型转换成所有程序语言都认识的字符串类型,再写入文件 dic = {'k1': 123, 'k2': 'v2'} json.dump(dic, open('db', 'w')) # json.load 从文件中字符串读出再转换成python的基本数据类型 r = json.load(open('db', 'r')) print(r, type(r)) ''' {'k1': 123, 'k2': 'v2'} <class 'dict'> ''' #注意事项 元组变转换成了列表,因为()这种不是通用的数据类型,列表跟字典为通用数据类型 n = (11, 22, 33, 44, 'alex') import json s = json.dumps(n) print(s,type(s)) ''' [11, 22, 33, 44, "alex"] <class 'str'> '''
pickle:专用于python的基本数据类型和一种只有python能认识的序列之间的转换,这种序列常常是bytes类型。pickle强大在于可以将代码,类序列化
pickle模块提供了四个功能:dumps, dump(序列化, 存), loads(反序列化, 读), load
import pickle data = {"k1": 123, "k2": 'Hello'} # pickle.dumps 将数据通过特殊的形式转换为只有python特有的类型 result = pickle.dumps(data) print(result, type(result)) ''' b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01K{X\x02\x00\x00\x00k2q\x02X\x05\x00\x00\x00Helloq\x03u.' <class 'bytes'> ''' # pickle.dump 将数据通过特殊的形式转换为只有python特有的类型,并写入文件 with open('dbb.txt', 'wb') as f: pickle.dump(data, f) # pickle.loads 将python特有的类型还原成原数据 new_data = pickle.loads(result) print(new_data, type(new_data)) ''' {'k1': 123, 'k2': 'Hello'} <class 'dict'> ''' # pickle.load 从文件中读出只有python特有的类型还原成原数据 with open('dbb.txt', 'rb') as f: new_data = pickle.load(f) print(new_data, type(new_data)) ''' {'k1': 123, 'k2': 'Hello'} <class 'dict'> '''