python-- pickle 序列化

简介: python-- pickle 序列化

pickle


dump的结果是bytes, dump用的f文件句柄需要以wb的形式打开, load所用的f是'rb'模式

  • 支持几乎所有对象的序列化
  • 对于对象的序列化需要这个对象对应的类在内存中
  • 对于多次dump / load的操作做了良好的处理
import pickle
dic = {1: (12, 3, 4), ('a', 'b'): 4}
pic_dic = pickle.dumps(dic)
print(pic_dic)  # bytes类型
new_dic = pickle.loads(pic_dic)
print(new_dic)

结果:

b'\x80\x03}q\x00(K\x01K\x0cK\x03K\x04\x87q\x01X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03\x86q\x04K\x04u.'
{1: (12, 3, 4), ('a', 'b'): 4}

pickle支持几乎所有对象的

import pickle
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
zou = Student('aa', 22)
ret = pickle.dumps(zou)
pickle_data = pickle.loads(ret)
print(pickle_data.name)
print(pickle_data.age)

结果:

aa
22

import pickle
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
zou = Student('aaa', 83)
with open('pickle_demo', 'wb') as f:
    pickle.dump(zou, f)
with open('pickle_demo', 'rb') as f:
    pic = pickle.load(f)
    print(pic.name)  # 没有上面的类就会报错,因为句话是从实例化类里拿name属性

结果:

aaa

import pickle
with open('pickle_demo', 'wb') as f:
    pickle.dump({'k1': 'v1'}, f)
    pickle.dump({'k11': 'v1'}, f)
    pickle.dump({'k11': 'v1'}, f)
    pickle.dump({'k12': [1, 2, 3]}, f)
    pickle.dump(['k1', 'v1', 'l1'], f)
with open('pickle_demo', 'rb') as f:
    while True:
        try:
            print(pickle.load(f))
        except EOFError:
            break

结果:

{'k1': 'v1'}
{'k11': 'v1'}
{'k11': 'v1'}
{'k12': [1, 2, 3]}
['k1', 'v1', 'l1']

相关文章
|
10天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
存储 JSON 数据格式
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
35 0
|
2月前
|
JSON 安全 数据格式
7-6|python报错TypeError: can't pickle _thread.RLock objects
7-6|python报错TypeError: can't pickle _thread.RLock objects
|
2月前
|
JSON 数据格式
序列化 json和pickle
序列化 json和pickle
|
3月前
|
存储 Python
dill:Python中增强版的pickle
dill:Python中增强版的pickle
|
3月前
|
存储 JSON JavaScript
python序列化: json & pickle & shelve 模块
python序列化: json & pickle & shelve 模块
|
3月前
|
存储 算法 Python
【Leetcode刷题Python】297. 二叉树的序列化与反序列化
LeetCode第297题"二叉树的序列化与反序列化"的Python语言解决方案,包括序列化二叉树为字符串和反序列化字符串为二叉树的算法实现。
25 5
|
3月前
|
JSON 缓存 安全
Python pickle 二进制序列化和反序列化 - 数据持久化
Python pickle 二进制序列化和反序列化 - 数据持久化
53 0
|
5月前
|
JSON 安全 数据格式
详解python pickle中的反序列化漏洞
今天我们来聊聊Python里的反序列化攻击。先来看看什么是序列化和反序列化。简单来说,序列化就是把数据结构转换成字节流,这样我们就可以把数据保存到文件里或者通过网络传输。反序列化则是把这些字节流再转换回原来的数据结构。 在Python里,常用的模块之一就是Pickle。它可以帮我们很方便地进行序列化和反序列化操作。比如,你可以把一个复杂的Python对象序列化保存下来,等需要用的时候再反序列化回来。 反序列化攻击的概述 反序列化过程有漏洞:如果我们反序列化了一个不可信的数据源,那就可能引发反序列化攻击。攻击者可以在序列化的数据里嵌入恶意代码,当你反序列化这个数据时,这些恶意代码就会被执
|
6月前
|
存储 编解码 Python
初出茅庐,python模块篇:pickle模块和pathlib模块(太过详细,篇幅较长)_python文件操作模块有pickle模块
初出茅庐,python模块篇:pickle模块和pathlib模块(太过详细,篇幅较长)_python文件操作模块有pickle模块