首先是引入json 和 pickle 的原因是 普通的方法支持的数据类型太少 局限性大  比如下面的例子

dit = {'name':'deng1mei','age':'26','sex':'girl'}        #创建一个字典
dit = str(dit) #将字典字符串化 以方便写入文件
# f= open ('test','w') #创建文件
# f.write(dit) #write() argument must be str, not dict #写入文件
f=open('test','r') #句柄 读取文件
date = f.read() #读取
print(eval(date)['name']) #deng1mei #想用eval将字符串变为原来的字典格式 这样才能通过键来找值 相对而言json就好得多虽然代码数量车不多
import json
dic = {'name':'deng1mei','age':'26','sex':'girl'}
# f= open('json_test','w') #同样的方法创建文件 # date = json.dumps(dic) #将字典上传为json格式的字符串
# f.write(date) #将其写入文件
#上面两句话等价于 json.dump(dic,f) #表示将数据转换并写入 f= open('json_test','r') #读取句柄 date =f.read() #将数据读取下来
date = json.loads(date) #将格式转化为其原本的字典格式
#上面两句等价于json.load(f) #调用句柄读取数据 转黄数据 print(date['name']) #deng1mei #按 键 取值 ####################看看函数能否读写 #####################
import json
def haa():
print('hello den1g1mei')
date = json.dumps(haa) # TypeError: Object of type function is not JSON serializable 显然json不能支持函数的数据转换 虽然json也很不错 但是对于函数也无可奈何 而pickle却可以
mport pickle
def haa():
print('hello deng1mei1')
# date=pickle.dumps(haa) #将函数对象上传转换为pickle的byte类型
# f = open('pickle_test','wb') #创建文件句柄 必须用'wb'是将其写入为byte类型
# f.write(date) #能够成功写入 相比json的写入范围大些
# f.close() f = open('pickle_test','rb') #读取句柄 同理需要写成'rb'
date = f.read() #读取数据
date = pickle.loads(date) #转换数据为函数类型
date() #hello deng1mei1 #在本地成功调用了函数 但是上传到其他电脑必须要有相同的函数出现才能调用 所以这有些鸡肋

###'补充一个模块和pickle差不多但是只有一open函数'#####返回的是类似字典的对象 key必须是字符串,值可以用python支持的所有类型
import shelve
f = shelve.open(r'shelve_test') #创建文件
# f['info'] = {'name':'l1xl1iu','age':'34','sex':'boy'} #写入一个内容 date =f.get('info') #读取内容
print(date) #{'name': 'l1xl1iu', 'age': '34', 'sex': 'boy'} #输出内容 相对而言shelve 模块用得比较少

总而言之 这两个模块用来将数据写入到文件时的转换  和 从文件上读取数据时的转换比较方便
如果出现这种报错
AttributeError: module 'pickle' has no attribute 'dump'

那么多半是文件名和模块名字相同了导致找不到函数

												

讲解 json 和 pickle 模块的更多相关文章

  1. 模块讲解----json与pickle模块的区别

    1.在生产中,dumps和loads只进行一次,而且要用w把原来的数据冲掉,从而保证每次都是最新的. 2.虚拟机的快照,是每个快照都有一个文件,而不是全都不放在一起. 3.如果想生产好几个序列化,就生 ...

  2. 模块讲解---os模块,sys模块,json和pickle模块,logging模块

    目录 模块的用法 os模块 常用的功能 sys模块 常用的功能 json和pickle模块 4. logging模块 模块的用法 通过 import 或者from......import...... ...

  3. python模块(json和pickle模块)

    json和pickle模块,两个都是用于序列化的模块 • json模块,用于字符串与python数据类型之间的转换 • pickle模块,用于python特有类型与python数据类型之间的转换 两个 ...

  4. python-时间模块,random、os、sys、shutil、json和pickle模块

    一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...

  5. Python json和pickle模块

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...

  6. 包--json 与 pickle 模块

    一. 包 一个含有__init__.py 文件的文件夹(将py 文件中的内容划分成不同的部分放在不同的py 文件中,在将这些py 文件放在一个文件夹中) 是模块,不做执行文件,仅做调用 m1.py 和 ...

  7. Python之时间模块、random模块、json与pickle模块

    一.时间模块 1.常用时间模块 import time # 时间分为三种格式 #1.时间戳---------------------以秒计算 # start= time.time() # time.s ...

  8. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  9. os模块,sys模块,json和pickle模块,logging模块

    目录 OS模块 sys模块 json和pickle模块 序列化和反序列化 json模块 pickle logging模块 OS模块 能与操作系统交互,控制文件 / 文件夹 # 创建文件夹 import ...

随机推荐

  1. OPEN GL

    https://blog.csdn.net/cdut100/article/details/45753227 https://www.jianshu.com/p/d22cf555de47 https: ...

  2. Selenium3+Python3环境搭建

    安装python 官网直接下载当前最新版的python Python官网地址:https://www.python.org/ 百度搜索Python3.6安装步骤 Python安装步骤:自行百度,暂不提 ...

  3. Spring Boot中路径及配置文件读取问题

    编译时src/main/java中*.java文件会被编译成*.class文件,在classpath中创建对应目录及class文件           src/main/resources目录中的文件 ...

  4. 【题解】GREWords(AC自动机)

    [题解]GREWords(AC自动机) SP9941 GRE - GRE Words 题目大意: 给定一个由字符串构成的序列,不同位置的字符串有自己权值.现在让你选出一个子序列,使得在这个子序列中,前 ...

  5. openlayers中实现点的拖拽(modify),在layer中增加修改删除point。

    最近忙着整地图,都忘记了总结来沉淀自己,自我检讨一下. 总结一下最近使用openlayer时学习的内容,先说下我的业务逻辑吧,在室内地图中 1,点击新增在地图上新增一个可以拖拽的点,拖拽完成后确定位置 ...

  6. 解决springmvc报错,java.lang.IllegalArgumentException:No converter found for return value of type: class .......

    1.背景 最近在自学java中的三大框架 ssm,在 springmvc 与 mybatis 整合过程中用到 json 数据交互.因为看的视频的是比较早的嘛,一些配置.jar包什么的,要么跟 jdk ...

  7. java线程相关基本方法

    java线程中常用的基本方法有wait,notify,notifyAll,sleep,join,yield等. 线程的生命周期一共分为五个部分,分别是:新建(New).就绪(Runnable).运行( ...

  8. 【转】出现“ValueError : numpy.ufunc has the wrong size, try recompiling" 解决方法

    出现这个问题的原因是:numpy版本和scikit-learn版本不搭配. 解决方法: 升级numpy即可: pip install -U numpy

  9. 题解 LA3720

    题目大意 多组数据,每组数据给定两个整数 \(n,m\),请求出 \(n\times m\) 的点阵(即 \((n-1)\times(m-1)\) 的方格)中有多少条非水平竖直的经过至少两个格点的不同 ...

  10. python递归(函数)

    递归:一个过程或函数调用自身的一种方法. 1. 效果图 2. 代码 def factorial(n): ''' 该函数用来求任意数的阶乘 参数: n 要求阶乘的数字 ''' # 基线条件 判断n是否为 ...