python永久保存数据,python – 保存对象(数据持久性)

您可以在标准库中使用pickle模块。

这里有一个基本的应用程序它的例子:

import pickle

class Company(object):

def __init__(self, name, value):

self.name = name

self.value = value

with open('company_data.pkl', 'wb') as output:

company1 = Company('banana', 40)

pickle.dump(company1, output, pickle.HIGHEST_PROTOCOL)

company2 = Company('spam', 42)

pickle.dump(company2, output, pickle.HIGHEST_PROTOCOL)

del company1

del company2

with open('company_data.pkl', 'rb') as input:

company1 = pickle.load(input)

print(company1.name) # -> banana

print(company1.value) # -> 40

company2 = pickle.load(input)

print(company2.name) # -> spam

print(company2.value) # -> 42

您还可以使用一个简单的实用程序,如下所示打开一个文件并向其中写入一个对象:

def save_object(obj, filename):

with open(filename, 'wb') as output:

pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)

# sample usage

save_object(company1, 'company1.pkl')

更新:

由于这是一个流行的答案,我想谈一些稍微高级的使用主题。

首先,几乎总是首选实际使用cPickle模块而不是pickle,因为前者是用C编写的,速度更快。它们之间有一些细微的差别,但在大多数情况下,它们是等效的,C版本将提供非常出色的性能。切换到它不容易,只需更改import语句为:

import cPickle as pickle

(注意:在Python 3中,cPickle被重命名为_pickle,但不再需要这样做,因为pickle模块现在自动执行 – 参见问题What difference between pickle and _pickle in python 3?)。

其次,不是在每次调用中都写pickle.HIGHEST_PROTOCOL(假设这是你想要的,你通常这样做),而是只使用文本-1。

所以,而不是写:

pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)

你可以写:

pickle.dump(obj, output, -1)

这是相当短一点。

一个更好的方法,你只有一个指定协议是创建一个Pickler对象,并使用它做多个pickle操作:

pickler = pickle.Pickler(output, -1)

pickler.dump(obj1)

pickler.dump(obj2)

etc...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值