json&pickle序列化
一、用途
我们需要将内存中的数据进行序列化,即写入文件中时,写入的类型只能是字符串或者二进制类型。但是如果我们想要将复杂一些的数据类型,如:列表、字典或者函数之类的同样进行序列化,我们就要用到 json或者pickle。
二、json序列化
1、dumps序列化和loads反序列化
dumps把数据类型转换成字符串
import json
info = {
'name': 'The Count of Monte Cristo',
'type': 'Movie'
}
data = json.dumps(info)
print(data)
print(type(data))
# 输出
{"name": "The Count of Monte Cristo", "type": "Movie"}
<class 'str'>
loads把字符串转换成数据类型
import json get_info = json.loads(data)
print(get_info['name'])
print(get_info)
print(type(get_info)) #输出
The Count of Monte Cristo
{'name': 'The Count of Monte Cristo', 'type': 'Movie'}
<class 'dict'>
2.dump序列化和load反序列化
dump把数据类型转换成字符串并存储在文件中
import json
info = {
'name': 'The Count of Monte Cristo',
'type': 'Movie'
}
with open("test.txt", "w", encoding="utf-8") as f:
json.dump(info, f) # 第一个参数是内存中的数据对象,第二个参数是文件句柄
#写入文件中的内容
{"name": "The Count of Monte Cristo", "type": "Movie"}
load把文件打开从字符串转换成数据类型
import json
with open("test.txt", "r", encoding="utf-8") as f:
data_from_file = json.load(f)
print(data_from_file['name'])
print(data_from_file)
print(type(data_from_file))
#输出
The Count of Monte Cristo
{'name': 'The Count of Monte Cristo', 'type': 'Movie'}
<class 'dict'>
3.json序列化一个函数
import json def test(name):
print("hello,{}".format(name)) info = {
'name': 'The Count of Monte Cristo',
'type': 'Movie',
'func': test
} data = json.dumps(info) #输出
File "G:/python/untitled/study6/json&pickle模块.py", line 22, in <module>
data = json.dumps(info)
File "G:\python\install\lib\json\__init__.py", line 230, in dumps
return _default_encoder.encode(obj)
File "G:\python\install\lib\json\encoder.py", line 198, in encode
chunks = self.iterencode(o, _one_shot=True)
File "G:\python\install\lib\json\encoder.py", line 256, in iterencode
return _iterencode(o, 0)
File "G:\python\install\lib\json\encoder.py", line 179, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <function test at 0x0000021B13C57F28> is not JSON serializable
1、json只能处理简单的数据类型,例如:字典、列表、字符串等,不能处理函数等复杂的数据类型。
2、json是所有语言通用的,所有语言都支持json,如果我们需要python跟其他语言进行数据交互,那么就用json格式
三、pickle序列化
pickle的用法和上面的相同,但是pickle序列化后的数据类型是二进制的,并且pickle只能在python中是使用。pickle序列化的是字节,而json序列化的是字符。
1.dumps && loads
import pickle def test(name):
print("hello,{}".format(name)) info = {
'name': 'The Count of Monte Cristo',
'type': 'Movie',
'func': test
} data = pickle.dumps(info)
print(data)
print(type(data)) #输出
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x19\x00\x00\x00The Count of Monte Cristoq\x02X\x04\x00\x00\x00typeq\x03X\x05\x00\x00\x00Movieq\x04X\x04\x00\x00\x00funcq\x05c__main__\ntest\nq\x06u.' <class 'bytes'>
import pickle get_data = pickle.loads(data)
get_data['func']('cat')
print(get_data) #输出
hello,cat
{'name': 'The Count of Monte Cristo', 'type': 'Movie', 'func': <function test at 0x00000235350A7F28>}
2. dump && load
import pickle def test(name):
print("hello,{}".format(name)) info = {
'name': 'The Count of Monte Cristo',
'type': 'Movie',
'func': test
} with open('test.txt', 'wb') as f:
pickle.dump(info, f) # 写入test.txt文件中的内容 �}q (X typeqX MovieqX funcqc__main__
test
qX nameqX The Count of Monte Cristoqu.
import pickle
with open('test.txt', 'rb') as f:
get_data = pickle.load(f)
print(get_data)
# 输出
{'name': 'The Count of Monte Cristo', 'func': <function test at 0x000001BA2AB4D510>, 'type': 'Movie'}
总结:
- json值支持简单的数据类型,pickle支持所有的数据类型。
- pickle只能支持python本身的序列化和反序列化,不能用作和其他语言做数据交互,而json可以。
- pickle序列化的是整个的数据对象,所以反序列化函数时,函数体中的逻辑变了,是跟着心的函数体走的。
json&pickle序列化的更多相关文章
- Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- json & pickle 序列化
#!/usr/bin/python # -*- coding: utf-8 -*- # 序列化: 例如把字典写进文件 info = { 'name': 'alex', 'age': 22 } f = ...
- json&pickle序列化和软件开发规范
json和pickle 用于序列化的两个模块 json 用于字符串和python数据类型间进行转换,json只支持列表,字典这样简单的数据类型 但是它不支持类,函数这样的数据类型转换 pickle ...
- 13、Python文件处理、os模块、json/pickle序列化模块
一.字符编码 Python3中字符串默认为Unicode编码. str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型. # coding:gbk x = '上' # 当程序执行时, ...
- Python序列化,json&pickle&shelve模块
1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...
- 第五章 模块之 shtil 、 json / pickle、importlib、collections
5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化
一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...
随机推荐
- eclipse版本信息及操作系统
一.查看版本信息: 进入到eclipse安装目录下,有一个.eclipseproduct文件,用记事本打开,就可以知道版本了,后面version=的值就是版本 二.是否为32位操作系统: 找到ecli ...
- python3【基础】-文件操作
1. python对文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件操作 关闭文件 现有如下文件: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧明. ...
- strace 命令
介绍 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...
- Scrum立会报告+燃尽图(十月十二日总第三次):视频相关工作
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190 Scrum立会master:孙赛佳 一.小组介绍 组长:付佳 组员 ...
- Linux 下web开发环境搭建-jdk环境搭建
Centos 7 附:windows 下jdk环境变量 CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools ...
- Java中的网络编程-2
Socket编程:(一般的网络编程) <1> 两个 JAVA 应用程序可通过一个双向的网络通信连接, 实现数据交换, 这个双向链路的一段称为一个 Socket. <2> Soc ...
- lintcode-418-整数转罗马数字
418-整数转罗马数字 给定一个整数,将其转换成罗马数字. 返回的结果要求在1-3999的范围内. 说明 什么是 罗马数字? https://en.wikipedia.org/wiki/Roman_n ...
- psp 第二周
11号 12号 类别c 内容c 开始时间s 结 ...
- Ubuntu 16.04 LTS安装sogou输入法详解
http://blog.csdn.net/qq_21792169/article/details/53152700 最近开始学习linux 在安装输入法中遇到的一些问题,最终成功安装,也得益于网络上的 ...
- 迭代器 每迭代一次 指针往下面移动一次 除非JVM回收了内存 否则 他的指针不会回到原地
迭代器 每迭代一次 指针往下面移动一次 除非JVM回收了内存 否则 他的指针不会回到原地