pickle模块可以将python对象序列化成二进制文件。python里面万物皆对象,列表,字典,数字,字符串,函数等等都可以是对象。pickle模块有4个方法,dump(),load(),dumps(),loads()。将对象序列化成二进制文件的过程叫pickle,将二进制文件反序列化成对象的过程叫unpickle。下面依次介绍pickle模块的4个方法,dump(),load(),dumps(),loads()。
dump和dumps是序列化函数,load和loads是反序列化函数。dump和load搭配使用,dumps和loads搭配使用。dumps和dump的区别是:
**1、dumps是将对象进行序列化,函数返回一个pickle编码的文件,然后再利用f.write()将序列化后的对象写到文件里面。loads的时候需要先用f.read()从文件中将序列化的对象从文件里面读出来,然后再利用pickle.loads()再将对象反序列化。而dumps可以直接将序列化之前的文件序列化后直接写到文件中,load可以从文件中读出序列化的对象后反序列化。
2、dumps和loads有返回值,dump和load没有返回值。
3、dumps()和loads()写入的文件里只能有一个二进制对象,但是dump和load写入对象的文件可以写入多个二进制对象。
dump()和load()
dumps可以直接将序列化之前的文件序列化后直接写到文件中,load可以从文件中读出序列化的对象后反序列化,没有返回值。
dump(obj, file)
参数:
obj: 要写入文件的对象
file: 要写入对象的已经打开的文件
load(file)
file:要读序列的文件
测试代码:
>>> a=[1,2,3,4,5]
>>> b=[2,3,4,5667]
>>> f=open('D://CNN_and_RNN//test_pickle1.txt','wb')
>>> pickle.dump(a,f)
>>> pickle.dump(b,f)
>>> f.close()
>>> f=open('D://CNN_and_RNN//test_pickle1.txt','rb')
>>> pickle.load(f)
[1, 2, 3, 4, 5]
>>> pickle.load(f)
[2, 3, 4, 5667]
dumps()和loads()
dumps是将对象进行序列化,函数返回一个pickle编码的文件,然后再利用f.write()将序列化后的对象写到文件里面。loads的时候需要先用f.read()从文件中将序列化的对象从文件里面读出来,然后再利用pickle.loads()再将对象反序列化。有返回值。
dumps()和loads()写入的文件里只能有一个二进制对象。
dumps(obj):
obj:要序列化的对象
loads(obj):
obj:要反序列化的对象
测试代码:
import pickle
if __name__ == '__main__':
f = open('D://CNN_and_RNN//test_pickle1.txt', 'wb')
a = [1, 2, 3, 4]
b = [4, 5, 6, 7]
temp_a = pickle.dumps(a)
f.write(temp_a)
f.close()
f = open('D://CNN_and_RNN//test_pickle1.txt', 'rb')
p = f.read()
print(pickle.loads(p))
f.close()
f = open('D://CNN_and_RNN//test_pickle1.txt', 'wb')
temp_b = pickle.dumps(b)
f.write(temp_b)
f.close()
f = open('D://CNN_and_RNN//test_pickle1.txt', 'rb')
p = f.read()
print(pickle.loads(p))
f.close()
输出为:
[1, 2, 3, 4]
[4, 5, 6, 7]