pickle库——存储Python原生对象

1. 前言 eval() 方法:

parts = ['[1, 2, 3]', "{'a':1, 'b':2}\n"]
eval(parts[0])    # [1, 2, 3]
objs = [eval(p) for P in parts]
print(objs)    # [[1, 2, 3], {'a':1, 'b':2}]

使用 eval 可以把字符串转换成对象,因此它是一个功能强大的工具。事实上,它有时太过于强大,eval 会高高兴兴地执行 Python 的任何表达式,只要给予必要的权限,甚至可能删除计算机上所有文件的表达式。如果你真的想存储 Python原生对象,但又无法信赖文件的数据来源,那么Python标准库pickle模块将是理想的选择。

pickle 模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,同时并不需要我们对字符串进行来回转换。

# Pickle any object to file
D = {'a':1, 'b':2}
F = open('datafile.pkl', 'wb')
import pickle
pickle.dump(D, F)
F.close()    

# Load any object from file
F = open('datafile.pkl', 'rb')
E = pickle.load(F)
E    # {'a':1, 'b':2}

 2. pickle提供四个功能:dumps,dump,loads,load

1. pickle.dumps(obj) (将数据通过特殊的形式转换为只有python语言认识的字符串)

函数的功能:将 obj 对象序列化为 string 形式,而不是存入文件中,以字节对象形式返回封装的对象。

data = ['aa', 'bb', 'cc']
p_str = pickle.dumps(data)
print(p_str)    
# b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.'

2. pickle.dump(obj, file, [,protocol]) (将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件)

参数:

必填参数 obj 表示将要封装的对象
必填参数 file 表示 obj 要写入的文件对象,file 必须以二进制可写模式打开,即 “wb”

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

3. pickle.loads(bytes_object)  (将 pickle 数据转换为 python 的数据结构)

mes = pickle.loads(p_str)
print(mes)  # ['aa', 'bb', 'cc']

4. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")

(从数据文件中读取数据,并转换为 python 的数据结构)

with open('pickle_text.txt', 'rb') as f:
    data = pickle.load(f)
print(data)

 

 

参考文档:

https://www.cnblogs.com/fmgao-technology/p/9078918.html

https://baike.baidu.com/item/%E5%BA%8F%E5%88%97%E5%8C%96/2890184?fr=aladdin

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值