前言

文件只能存储字符串、二进制,若把内存的数据对象存到硬盘   从硬盘里读取数据,里面不止是字符串的类型,因此用到了json and pickle 序列化

json序列化

作用:用于不同语言进行的数据交互,json默认只能处理简单化的数据类型:字典、列表、字符串。为何只能处理简单的数据类型?因为java里的类和pyhton的类完全不一样,定义、特性等

文件只能存储字符串、二进制,例如将数据字典的数据类型写入文件,报错

按之前学过的知识对文件序列化

 info = {
"name":"Mike",
"age":16
}
f = open("json1","w",encoding = "utf-8")
f.write(info)
f.close()
结果:
Traceback (most recent call last):
File "E:/python_3.5/second/json模块/json1.py", line 6, in <module>
f.write(info)
TypeError: write() argument must be str, not dict

数据类型为字符串已存入文件

 info = {
"name":"Mike",
"age":16
}
f = open("json1","w",encoding = "utf-8")
f.write(str(info))
f.close()
写入的json1文件
{'age': 16, 'name': 'Mike'}

用json.dumps()序列化

 import json
info = {
"name":"Mike",
"age":16
}
f = open("json1","w",encoding = "utf-8")
#print(json.dumps(info)) #结果{"age": 16, "name": "Mike"}
f.write(json.dumps(info)) 写入文件
{"age": 16, "name": "Mike"}

json.dump()序列化

不用写f.write()  将文件句柄传入

 import json
info = {
"name":"Mike",
"age":16,
#"fun":sayhi
} f = open("json1","w",encoding = "utf-8”)
json.dump(info,f) 写入文件:
{"age": 16, "name": "Mike"}

json.loads()反序列化

按之前学过的知识对文件反序列化

 f = open("json1","r",encoding = "utf-8")
data = eval(f.read())
print(data)
print(data["age"]) 结果:
{'age': 16, 'name': 'Mike'}
16

用json反序列化读取文件

 import json
f = open("json1","r",encoding = "utf-8")
data = json.loads(f.read())
print(data["age"])
结果
16

json.load()反序列化

 import json
f = open("json1","r")
# data = pickle.loads(f.read())
print(json.load(f)) 结果:
{'age': 16, 'name': 'Mike'}

pickle.dumps() 序列化

pickle只有在Python本语言里使用,java不认识pickle数据类型,只认识json数据类型

pickle可以序列化python里的所有数据类型

 import pickle
def sayhi():
print("hello")
info = {
"name":"Mike",
"age":16,
"fun":sayhi
} f = open("json1","wb")
f.write(pickle.dumps(info))

写入的文件

注意:

pickle.loads() 反序列化

 import pickle
def sayhi():
print("hello") #为何这里要再写一遍,在序列化时程序结束函数的内存地址已经被释放了 已找不到 f = open("json1","rb")
data = pickle.loads(f.read())
print(data["age"])
print(data)
结果:
16
{'name': 'Mike', 'fun': <function sayhi at 0x005D2FA8>, 'age': 16}

json and pickle 序列化的更多相关文章

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

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

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

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

  3. Python的json and pickle序列化

    json序列化和json反序列化 #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' import json a = ...

  4. (1)json和pickle序列化模块

    json 和pickle 模块 json和pickle模块下都有4个功能 dumps  <---> loads  (序列化 <--->反序列化) dump <---> ...

  5. Python3 json、pickle序列化与反序列化

    注意:可以dumps多次,loads只能一次,一般我们只dumps一次,loads一次,多个版本就写入多个文件 一.json序列化与反序列化: 支持各种语言数据交互,但只能处理字典,列表,集合等简单的 ...

  6. json和pickle序列化模块

    一.json序列化模块 1.序列化:将内存数据转成字符串加以保存. 2.反序列化:将字符串转成内存数据加以读取. data = { '北京':{ '五道口':{ 'sohu':'引擎', } } } ...

  7. python 跨语言数据交互、json、pickle(序列化)、urllib、requests(爬虫模块)、XML。

    Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进 ...

  8. json and pickle 序列化和反序列化

    类似vmware虚拟机里的虚拟主机挂起操作,把当前内存拷贝成文件保存. 上面的这种操作就叫内存序列化:如下图: 有序列化就有反序列化,要把文件里的东西再恢复成字典:eval把字符串变成字典. 但是上面 ...

  9. python学习之day5,装饰器,生成器,迭代器,json,pickle

    1.装饰器 import os import time def auth(type): def timeer(func): def inner(*args,**kwargs): start = tim ...

随机推荐

  1. java-Set集合、HashSet集合、LinkedHashSet集合和TreeSet集合

    1.Set集合,无索引,不可以重复,无序(存取不一致) public class Demo { public static void main(String[] args) { //demo1(); ...

  2. [R] t.test()

    t.test(x, y = NULL, alternative = c("two.sided", "less","greater"), mu ...

  3. 集合总结四(LinkedHashMap的实现原理)

    一.概述 按照惯例,先看一下源码里的第一段注释: Hash table and linked list implementation of the Map interface, with predic ...

  4. 谈谈 ServerFul 架构

    我写了一篇文章 <自己实现一个线程池>  https://www.cnblogs.com/KSongKing/p/9803935.html , 其实 不仅仅 是 线程池, 中间件 层 的 ...

  5. 写了个自动生成vcxproj的程序

    背景: 公司的vcxproj有个模板,必须要遵守 程序测试 config = { { ProjName = 'my_exe', ClCompile = {'main.cpp', 'main2.cpp' ...

  6. Makefile知识点总结

    1.=,:=,+=区别 = 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值 .“=” make会将整个makefile展开后,再决定变量的值 ...

  7. k8s Nodeport方式下service访问,iptables处理逻辑(转)

    原文 https://www.myf5.net/post/2330.htm k8s Nodeport方式下service访问,iptables处理逻辑 2017年07月11日 0条评论 976次阅读 ...

  8. 文件管理 - Ring3创建目录

    //多字符集 #include "stdafx.h" #include <Windows.h> #include <iostream> using name ...

  9. 使用 tag 文件定义自定义标签

    ----------------------------------------------------------------------- 在jsp文件中,可以引用tag和tld文件. 1.对于t ...

  10. c# 泛型和IComparable<T>接口

    泛型 因为我们在编程中想先不定义数据类型,只想先写逻辑,就可以使用Object类型, 这样我们的逻辑就适用于所有类型,但是,在运行中,Object类型的变量会需要 转换到对应类型,浪费资源,所有出现泛 ...