pickle --- Python 对象序列化

通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。

通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

警告pickle 模块并不安全。你只应该对你信任的数据进行unpickle操作。

构建恶意的 pickle 数据来在解封时执行任意代码是可能的。

绝对不要对不信任来源的数据和可能被篡改过的数据进行解封。

在你处理不信任数据时,更安全的序列化格式如 json 可能更为适合

# 将 obj 封存以后的对象作为 bytes 类型直接返回,而不是将其写入到文件
pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None) # 重建并返回一个对象的封存表示形式 data 的对象层级结构。 data 必须为 bytes-like object
pickle.loads(data, *, fix_imports=True, encoding="ASCII",
errors="strict", buffers=None) >>> a = [1, 2, 3, 4]
>>>
>>> b = pickle.dumps(a) # dumps()
>>>
>>> b
b'\x80\x04\x95\r\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04e.'
>>>
>>> c = pickle.loads(b) # loads()
>>> c
[1, 2, 3, 4] # 将对象 obj 封存以后的对象写入已打开的 file object file
pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None) # 从已打开的 file object 文件 中读取封存后的对象,重建其中特定对象的层次结构并返回
pickle.load(file, *, fix_imports=True, encoding="ASCII",
errors="strict", buffers=None) >>> def code():
... print('嘿嘿')
...
>>> with open('a.txt', 'wb') as fp: #dump()
... pickle.dump(code, fp)
...
>>> with open('a.txt', 'rb') as fp: #load()
... pickle.load(fp)()
...
嘿嘿

json --- JSON 编码和解码器

是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式

Python 编码为 JSON 类型转换对应表:

Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True true
False false
None null

JSON 解码为 Python 类型转换对应表:

JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None
# json.dumps 用于将 Python 对象编码成 JSON 字符串
json.dumps(obj, skipkeys=False, ensure_ascii=True,
check_circular=True, allow_nan=True, cls=None, indent=None,
separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
# 如果 ensure_ascii 是 true (即默认值),输出保证将所有输入的非 ASCII 字符转义
# 如果 ensure_ascii 是 false,这些字符会原样输出
# 如果 sort_keys 是 true(默认为 False),那么字典的输出会以键的顺序排序 >>> dic = { '张三':{'age': '16',
... 'like':'打球',},
... '李四':{'age': '19',
... 'like':'游泳',}
... }
>>>
>>> json.dumps(dic, ensure_ascii=False)
'{"张三": {"age": "16", "like": "打球"}, "李四": {"age": "19", "like": "游泳"}}' # json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型
json.loads(s, *, cls=None, object_hook=None,
parse_float=None, parse_int=None, parse_constant=None,
object_pairs_hook=None, **kw) >>> json.loads(json.dumps(dic))
{'张三': {'age': '16', 'like': '打球'}, '李四': {'age': '19', 'like': '游泳'}} #---------
>>> dic = { '张三':{'age': '16',
... 'like':'打球',},
... '李四':{'age': '19',
... 'like':'游泳',}
... }
>>>
>>> with open('a.txt', 'w', encoding='utf-8') as fp:
... json.dump(dic, fp, ensure_ascii=False)
...
>>>
>>> with open('a.txt', 'r', encoding='utf-8') as fp:
... json.load(fp)
...
{'张三': {'age': '16', 'like': '打球'}, '李四': {'age': '19', 'like': '游泳'}}
>>>

小结:pickle模块可以连续的dump和load。每一次的dump会在结尾的地方加上一个结束标记

json模块可以连续的dump,但是结束的时候没有结束标记。

想要连续load,需要自定义结束标记,让以标记为循环的去load数据

pickle json模块的更多相关文章

  1. python day7: time,datetime,sys,pickle,json模块

    目录 python day 7 1. time模块 2. datetime模块 2.1 date类 2.2 time类 2.3 datetime类 2.4 timedelta类 2.5 tzinfo时 ...

  2. pytho中pickle、json模块

    pickle & json 模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四 ...

  3. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  4. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  5. pickle和json模块

    json模块 json模块是实现序列化和反序列化的,主要用户不同程序之间的数据交换,首先来看一下: dumps()序列化 import json '''json模块是实现序列化和反序列话功能的''' ...

  6. json模块和pickle模块的用法

    在python中,可以使用pickle和json两个模块对数据进行序列化操作 其中: json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作 pickle可以用于python ...

  7. 【python标准库模块四】Json模块和Pickle模块学习

    Json模块 原来有个eval函数能能够从字符串中提取出对应的数据类型,比如"{"name":"zhangsan"}",可以提取出一个字典. ...

  8. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  9. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

随机推荐

  1. C++共享数据保护机制

    下面随笔说明C++共享数据保护机制. 共享数据的保护 对于既需要共享.又需要防止改变的数据应该声明为常类型(用const进行修饰). 对于不改变对象状态的成员函数应该声明为常函数. (1)常类型 ①常 ...

  2. [转载]Android MVC,MVP和MVVM 思想&例子

    在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图   mvc mvp 可以看出,在 MV ...

  3. Vue.js 实现的 3D Tab菜单

    今天给大家带来一款基于VueJS的3D Tab菜单,它跟我们之前分享的许多CSS3 Tab菜单不同的是,它可以随着鼠标移动呈现出3D立体的视觉效果,每个tab页面还可以通过CSS自定义封面照片.它的核 ...

  4. 漏洞复现-CVE-2018-8715-Appweb

          0x00 实验环境 攻击机:Win 10 0x01 影响版本 嵌入式HTTP Web服务器,<7.0.3版本 0x02 漏洞复现 (1)实验环境: 打开后出现此弹框登录界面: (2) ...

  5. python3中post请求 json 数据

    post请求 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json headers = { "Us ...

  6. JS的this指向深入

    this指向深入 this的绑定规则 默认绑定 this默认指向了window 全局环境下this指向了window 函数独立调用,函数内部的this也指向了window <script> ...

  7. C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求

    1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...

  8. 02-Spring配置文件加载

    获取IOC容器 加载.解析xml文件,形成GenericBeanDefinition,供后续实例化剩下的所有 Bean 使用. obtainFreshBeanFactory() 获取IOC容器 pro ...

  9. 顺序表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; # ...

  10. 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...