1、pickle模块
python持久化的存储数据:
python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。python模块大全中pickle模块就排上用场了, 他可以将对象转换为一种可以传输或存储的格式。
pickle模块将任意一个python对象转换成一系统字节的这个操作过程叫做串行化对象。
python的pickle模块实现了python的所有数据序列和反序列化。基本上功能使用和JSON模块没有太大区别,方法也同样是dumps/dump和loads/load。cPickle是pickle模块的C语言编译版本相对速度更快。
与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
import pickle data2 = [1,2,3,4] det_str = pickle.dumps(data2) print(det_str) #output: 输出为二进制格式 b‘\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.‘ #将数据序列化后存储到文件中 f = open(‘test.txt‘,‘wb‘) #pickle只能以二进制格式存储数据到文件 data = {‘k1‘:‘python‘,‘k2‘:‘java‘} f.write(pickle.dumps(data)) #dumps序列化源数据后写入文件 f.close() #反序列化读取源数据 import pickle f = open(‘test.txt‘,‘rb‘) da = pickle.loads(f.read()) #使用loads反序列化 print(da)
dumps和dump,load和loads的区别:
dumps是将对象序列化
dump是将对象序列化并保存到文件中
loads将序列化字符串反序列化
load将序列化字符串从文件读取并反序列化
import pickle data1 = [1,‘a‘,2,‘b‘,3,‘c‘] pi = pickle.dumps(data1) #序列化对象 print(pi) print(pickle.loads(pi)) #反序列化对象 f = open(‘test1.txt‘,‘wb‘) data2 = [‘py‘,‘th‘,‘on‘,123] pickle.dump(data2,f) #序列化对象到文件 f = open(‘test1.txt‘,‘rb‘) red = pickle.load(f) #从文件中反序列化对象 print(red)
2、json模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
data1 = [1,‘a‘,2,‘b‘,3,‘c‘] pi = json.dumps(data1) print(pi) print(json.loads(pi)) f = open(‘test1.txt‘,‘w‘) #与pickle不同的是存储时不使用二进制存储,而使用str data2 = [‘py‘,‘th‘,‘on‘,123] json.dump(data2,f) f = open(‘test1.txt‘,‘r‘) red = json.load(f) print(red)
3、json与pickle模块的区别
1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。