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)
原文地址:https://blog.csdn.net/m0_46483236/article/details/140616575
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!