Python基础:pickle (序列化与反序列化)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lthirdonel/article/details/88638814

pickle
pickle是一个将内存中的数据(运行中的非持久存储的)存储的硬盘上(持久的文件)

pickle可以将对象以文件的形式存放在磁盘上

pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化

pickle 语法

pickle.dump(obj, file[, protocol])

序列化对象,并将结果数据流写入到文件对象中。
参数protocol是序列化模式,
默认值为0,表示以文本的形式序列化。
protocol的值还可以是1或2,表示以二进制的形式序列化。

pickle.load(file)

反序列化对象。将文件中的数据解析为一个Python对象。
其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错

open函数
上面的file是open函数返回的文件对象
http://www.runoob.com/python/python-func-open.html

实例
下面代码是将user_item_reviews变成user_item_reviews_emb

import pandas as pd
import numpy as np
import os
import pickle
import pdb

word_id_dict = pickle.load(open('word_id_dict', 'r'))
user_item_reviews = pickle.load(open('user_item_review', 'r'))
word_embs = pickle.load(open('word_emb.pkl', 'r'))
item_reviews = pickle.load(open('item_reviews', 'r'))

word_emb=[]
user_item_review_emb=[]
user_item_reviews_emb={}
for item in item_reviews:
    #print (item)
    for user_item in item_reviews[item]:
        #print(user_item[0])
        user_item_review_emb = []
        for user_item_review in user_item[2]:
            #if item=='162' and user_item[0]=='538':
                word_emb=0
                for word_id in user_item_review:
                    word_emb += word_embs[word_id]
                word_emb /= len(user_item_review)
                #print(np.array(word_emb))
                user_item_review_emb.append(np.array(word_emb))
        user_item_reviews_emb[user_item[0]+'@'+item]=user_item_review_emb

pickle.dump(user_item_reviews_emb, open('liuyang', "wb"))


pdb.set_trace()

猜你喜欢

转载自blog.csdn.net/lthirdonel/article/details/88638814