Python中pickle模块用法详解

  • pickle模块实现了数据序列和反序列化。
  • pickle模块使用的数据格式是python专用的,能够把Python对象直接保存到文件,而不须要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中。

1. pickle.dump(obj, file, [,protocol])

函数的功能:接受一个文件句柄和一个数据对象作为參数,把数据对象obj以特定的格式保存到给定的文件file里。

 参数:

  • obj:想要序列化的obj对象。
  • file:文件名称。
  • protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

示例代码:

import pickle

# 序列号文件
obj = 123, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)

# 写入文件
# f = open("./pickle.txt", 'w')  # TypeError: write() argument must be str, not bytes
f = open("./pickle.txt", 'wb')  # TypeError: write() argument must be str, not bytes
pickle.dump(obj, f)
f.close()

运行结果:

示例代码2:  【循环多次写入文件】

import pickle

# 循环多次写入文件
f = open("./pickle.txt", 'ab')  # TypeError: write() argument must be str, not bytes
for i in range(5):
    # 序列号文件
    obj = i, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
    print(obj)
    pickle.dump(obj, f)
f.close()

运行结果:

2.pickle.load(file)

函数的功能:将file中的对象序列化读出。

 参数:

  • file:文件名称。

示例代码:

import pickle

# 读取文件
# f = open("./pickle.txt", "r")  # UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
f = open("./pickle.txt", "rb")
data = pickle.load(f)
print(data)
f.close()

运行结果:

示例代码2:【循环多次读取文件】

import pickle

# 读取文件
f = open("./pickle.txt", "rb")
for i in range(3):
    data = pickle.load(f)
    print(data)
f.close()

运行结果:

注意:当多次使用pickle.dump()写入时,使用pickle.load()一次只能读取一次写入的内容。

3.pickle.dumps(obj[, protocol])

函数的功能:将obj对象序列化为string形式,而不是存入文件中。

 参数:

  • obj:想要序列化的obj对象。
  • protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

示例代码:

import pickle

# 序列号文件
obj = 123, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)

s = pickle.dumps(obj)
print(s)

运行结果:

4.pickle.loads(string)

函数的功能:从string中读出序列化前的obj对象。

 参数:

  • string:文件名称。

示例代码:

import pickle

# 序列号文件
obj = 123, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)

# dumps
s = pickle.dumps(obj)
print(s)

# loads
res = pickle.loads(s)
print(res)

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值