用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串

json.dump 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件

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

pickle.dump 将数据通过特殊的形式转换为只有Python语言认识的字符串,并写入文件

Json序列化举例:

# json是所有语言中都通用的,适用于不同语言进行数据交互。
# 但json只能处理简单的数据类型,如果要处理复杂的,可以使用pickle
# 应用场景举例:当你使用虚拟机(或者玩游戏)时,中间你突然有点别的事情,于是要将虚拟机挂起,以便下次使用时还是现在的状态。
# 于是就用到了json,json序列化将虚拟机目前的状态(比如进行了什么操作,打开了什么文件)保存在文件中,
# 当你干完别的事,再次启动虚拟机时,json反序列化会将文件中保存的状态从文件中读出来,于是你就可以继续上次的操作了。 # dump和load配合使用可以实现序列化和反序列化,
# 在Python2中可以dump很多次,也可以load很多次,他们一一对应,但是其实这没什么意义
# 但在Python3中,可以dump很多次,但是当dump多次时,load会报错,所以记住在Python3中永远不要dump多次
import json
info = { "name":"Alex", "age":22 } with open('text.txt','w',encoding='utf-8') as f:
#f.write(info) #报错,字典不能写入文件中,字符串能写入文件中
#f.write(str(info)) #太low了
print(type(json.dumps(info))) # <class 'str'>
#f.write( json.dumps(info) ) # 高级做法1
json.dump(info,f) # 高级做法2,同上

json序列化.py

import json
with open('text.txt','r',encoding='utf8') as f:
#data=json.loads(f.read())
data=json.load(f) #同上
print(data["age"])

json反序列化.py

pickle序列化举例:

# pickle写进文件中的貌似是一段乱码,其实不然,这是pickle自己的一套语法规则,当然这也不是加密
# pickle可以序列化所有的数据类型
# 但是pickle只能在Python中使用,别的语言不认识它 import pickle
def sayhi(name):
print("Hello ",name) info = { "name":"Alex", "age":22, 'func':sayhi } with open('text2.txt','wb') as f:
print(type(pickle.dumps(info))) # <class 'bytes'>
f.write( pickle.dumps(info) ) # sayhi是一个内存地址,用json序列化就写不到文件中,会报错

pickle序列化.py

import pickle
# def sayhi(name):
# print("Hello2 ",name) with open('text2.txt','rb') as f:
data=pickle.loads(f.read()) # 报错
print(data)
# data["func"]('alex')
# AttributeError: Can't get attribute 'sayhi' on <module '__main__' from 'D:/python-study/s14/Day04/pickle反序列化.py'>
# 为什么报错呢?因为sayhi是一个内存地址,当pickle序列化.py程序执行完之后,这个地址就被释放了,当然我们就找不到了。
# 这里只是想说明一点:pickle可以序列化所有的数据类型,不管这个数据是否可被反序列化
# 如果想要不报错,可以把sayhi函数的定义拷贝过来,而且还可以执行这个函数
# 只要保证函数名相同就不会报错,函数体可以完全不一样

pickle反序列化.py

json模块的作用之一:根据字符串书写格式,将字符串自动转换成相应格式

import json

# Python3.x中input方法获取到的都是字符串,相当于Python2.x中的raw_input
inp_str = input("请输入:") # 输入一个列表,[1,2,3]
print(type(inp_str)) # <class 'str'>
inp_str = json.loads(inp_str,encoding="UTF-8") # 根据字符串书写格式,将字符串自动转换成 列表类型
print(type(inp_str),inp_str[0]) # <class 'list'> 1 inp_str = input("请输入:") # 输入一个字典,{"name":"Rose","age":21,"sex":"F"}
# 切记,字典内部必须是 双引号 !!!单引号会报错。
print(type(inp_str)) # <class 'str'>
inp_str = json.loads(inp_str,encoding="UTF-8") # 根据字符串书写格式,将字符串自动转换成 字典类型
print(type(inp_str),inp_str['name'],inp_str['age'],inp_str['sex']) # <class 'dict'> Rose 21 F

Python3学习之路~5.7 Json & pickle 模块的更多相关文章

  1. Python3学习之路~5.9 xml处理模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,以前在json还没诞生的时候,大家只能选择用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

  2. Python3学习之路~7.4 动态导入模块

    动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块. 准备: 首先创建一个模块目录lib,然后在目录内创建一个模块 aa.py: # aa.pyclass C: def __ini ...

  3. Python3学习之路~5.2 time & datetime模块

    time模块 时间相关的操作,时间有三种表示方式: 时间戳               1970年1月1日之后的秒,即:time.time() 格式化的字符串    2014-11-11 11:11, ...

  4. Python3学习之路~0 目录

    目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...

  5. python之os与json&pickle模块

     一.os模块 简单概述一下os模块就是与操作系统交互的一个接口 import os #os.getcwd() print(os.getcwd()) # 获取到当前工作目录 # 运行结果:E:\pyt ...

  6. Pythoy 数据类型序列化——json&pickle 模块

    Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...

  7. 20181205(模块循环导入解决方案,json&pickle模块,time,date,random介绍)

    一.补充内容 循环导入 解决方案: 1.将导入的语句挪到后面. ​ 2.将导入语句放入函数,函数在定义阶段不运行 #m1.pyprint('正在导入m1')   #②能够正常打印from m2 imp ...

  8. [re模块、json&pickle模块]

    [re模块.json&pickle模块] re模块 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则 ...

  9. json&pickle模块

    序列化:我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化 反序列化:把变量内容从序列化的对象重新读到内存中,这一过程称为反序列化 为什么要序列化? 1.持久保存状态 一个软件的执行就是在处 ...

随机推荐

  1. Service 中的 onStart 和 onStartCommand

    在自定义的service中,写了onStart和onStartCommand, public class HttpWebService extends Service { @Override publ ...

  2. HTML jQuery实现的expend row

    问 题:今天接到个任务,在一个老的系统页面里实现可展开的表格行. 寻找: 1.首先想到了在easyUI里见过的expand row form: 2.但是我们的老系统管理只有jQuery,如果使用eas ...

  3. Git工作流程最佳实践总结

    Git作为一个目前非常流行的版本管理工具,深受开发者的喜爱.那么怎样才能将Git的作用发挥的更好呢?我根据实际的项目经验,归纳总结了以下Git工作流的最佳实践.这里所谓的最佳,是经过多次项目经验后,根 ...

  4. File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).

    File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1). 这 ...

  5. 一、在windows环境下修改pip镜像源的方法(以python3为例)

    在windows环境下修改pip镜像源的方法(以python3为例) 1.在windows文件管理器中,输入 %APPDATA% 2.会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文 ...

  6. 我学到的新知识之——Lotus Notes闪退如何修复

    很多企业内部都在使用IBM 出品的Lotus Notes 来收发邮件,以及内置的SameTime作为内部交流工具,作为用了多年微软套装产品的我来说,还是有些不适应. 最近遇到一个案例,只要用户登陆sa ...

  7. css学习_写法规范、选择器

    1.css(层叠样式表)样式主要目的(让页面更好看些) css尽量不要写内联样式,保证结构和样式分离原则: html专门负责结构,css专门负责样式. 2.css写法规范 选择器  { 属性 :值 : ...

  8. python与pip安装

    # Install pip for 2.7 and then python 2.7 itself sudo apt install python-pip sudo apt install python ...

  9. C和C指针小记(七)-整型变量范围

    1.变量范围 limits.h 头文件中定义来C 语言的变量范围. 变量范围的限制 //char 的范围 printf("CHAR_BIT:%d CHAR_MIN:%d CHAR_MAX:% ...

  10. webstorm 智能提示忽略大小写

    setting-Editor-General-Code Completion里的 Case sensitive completion: 可以设置只第一个字母敏感.完全敏感或者不敏感. 选择none.. ...