pickle模块

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]

你可能感兴趣的:(python)