python中利用pickle模块保存格式化数据

有时候需要保存复杂的格式化的数据,比如保存一个字典,这就可以用pickle模块进行保存。

pickle模块简介

pickle模块是python专用的持久化模块,可以持久化保存包括自定义数据在内的各种数据,适合python本身复杂数据的保存

具体来说,pickle模块可以把python对象直接保存到文件里,而不需要先把它们转成字符串再保存。pickle模块会创建一个python语言专用的二进制格式,不需要使用者考虑任何文件细节,它会帮你完成读写对象操作。

主要用法介绍

主要有以下几种用法对文件进行读写操作。其中,dumps()和loads()操作的是bytes类型,而使用dump()和load()读写文件时,要使用rb或wb模式,也就是直接收bytes类型的数据。

1. pickle.dump(obj, file)

    将python数据转换并保存到pickle格式的文件内

import pickle 

with open('data.pickle', 'wb') as f:
    pickle.dump(data, f)
    f.close()

2. pickle.dumps(obj)

    将python数据转换为pickle格式的bytes字串

import pickle

data = {'k1':'v1', 'k2':222}
s = pickle.dumps(data)
print(s)

3. pickle.load(file)

    从pickle格式的文件种读取数据并转换为python的类型

import pickle

with open('data.pickle', 'rb') as f:
    data = pickle.load(f)
    f.close()

4. pickle.loads(bytes_object)

    将pickle格式的bytes字串转换为python的类型

import pickle

data = {'k1':'v1', 'k2':222}
s = pickle.dumps(data)
data2 = pickle.loads(s)

注意:上述保存的文件的后缀随意,可以是'.pkl',也可以是'.pickle'

实例应用

在实际应用中,比如需要将所有的音素进行编号,进行音素和id之间的一一对应,这就可以用pickle模块,保存一个mapping.pkl文件

import pickle

with open('config/english_mapping.pkl', 'rb') as fp:
    phn2idx = pickle.load(fp)
    fp.close()
    '''
    {'<sos>': 0, '<eos>': 1, 'a': 2, 'aa': 3, 'aa1': 4, 'aa2': 5, 'aa3': 6, 'aa4': 7, 'aa5': 8, 
    'aa6': 9, 'b': 10, 'c': 11, 'd': 12, 'e': 13, 'e1': 14, 'e2': 15, 'e3': 16, 'e4': 17, 
    'e5': 18, 'e6': 19, 'eo': 20, 'f': 21, 'g': 22, 'gw': 23, 'h': 24, 'i': 25, 'i1': 26, 
    'i2': 27, 'i3': 28, 'i4': 29, 'i5': 30, 'i6': 31, 'j': 32, 'k': 33, 'k1': 34, 'k2': 35, 
    'k3': 36, 'k4': 37, 'k5': 38, 'k6': 39, 'kw': 40, 'l': 41, 'm': 42, 'm1': 43, 'm2': 44, 
    'm3': 45, 'm4': 46, 'm5': 47, 'm6': 48, 'n': 49, 'n1': 50, 'n2': 51, 'n3': 52, 'n4': 53, 
    'n5': 54, 'n6': 55, 'ng': 56, 'ng1': 57, 'ng2': 58, 'ng3': 59, 'ng4': 60, 'ng5': 61, 
    'ng6': 62, 'o': 63, 'o1': 64, 'o2': 65, 'o3': 66, 'o4': 67, 'o5': 68, 'o6': 69, 'oe': 70, 
    'oe1': 71, 'oe2': 72, 'oe3': 73, 'oe4': 74, 'oe5': 75, 'p': 76, 'p1': 77, 'p2': 78, 'p3': 79, 
    'p6': 80, 's': 81, 'sil': 82, 't': 83, 't1': 84, 't2': 85, 't3': 86, 't6': 87, 'u': 88, 
    'u1': 89, 'u2': 90, 'u3': 91, 'u4': 92, 'u5': 93, 'u6': 94, 'w': 95, 'yu': 96, 'yu1': 97, 
    'yu2': 98, 'yu3': 99, 'yu4': 100, 'yu5': 101, 'yu6': 102, 'z': 103}
    '''

参考:

 一文带你搞懂Python中pickle模块 - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值