python 序列化对象
python 序列化对象
阿豪boy 发表于5个月前
python 序列化对象
  • 发表于 5个月前
  • 阅读 14
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

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

------------------------------------------
pickle.load(file)
  反序列化对象。将文件中的数据解析为一个Python对象。

其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:

 

import pickle
from io import StringIO
import os


class Stu:
    def __init__(self, id, name):
        self.id = id
        self.name = name

    def show(self):
        print(self.id + ' ' + self.name)


s1 = Stu('001', 'abc')
s2 = Stu('002', 'def')

with open('s.txt', 'wb') as f:
    pickle.dump(s1, f)

print(id(s1))
with open('s.txt', 'rb') as f:
    ss = pickle.load(f)
    ss.show()
    print(id(ss))
    print(ss == s1)

print(os.path.getsize('s.txt'))

with open('s.txt', 'wb') as f:
    pickle.dump(s1, f)
    pickle.dump(s2, f)
    pickle.dump(s1, f)

# 可以向一个文件序列化多个对象,只需要按照顺序取出来即可
with open('s.txt', 'rb') as f:
    ss1 = pickle.load(f)
    ss2 = pickle.load(f)
    ss3 = pickle.load(f)
    ss1.show()
    ss2.show()
    ss3.show()
    print(id(ss1))
    print(ss1 == s1)

print(os.path.getsize('s.txt'))

 

运行结果

2214182493376
001 abc
2214182486368
False
69
001 abc
002 def
001 abc
2214182486424
False
207

 

共有 人打赏支持
粉丝 5
博文 516
码字总数 393207
×
阿豪boy
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: