json、pickle区别

总结:

"""
json:
1.不是所有的数据类型否可以序列化,序列化返回结果为字符串
2.不能多次对同一文件序列化
3.json数据可以跨语言 pickle:
1.所有python数据类型都可以序列化,结果为字节串
2.可以多次对同一文件序列化
3.不能跨语言(只python)
"""

json

  • 序列化:将内存中的数据,转换成字节串,用以保存在文件或者网络传输,称为序列化过程

  • 反序列化:从文件中\网络中获取的数据,转换成内存中原来的数据类型,成为反序列化过程

"""
json模块
java脚本对象标记语言
把所有的东西都转换成字符串格式
"""
import json # 序列化:将数据转换为字符串,用以存储或者网络传输
# dumps:从内存到内存
res = json.dumps(10)
print(res) # "10" # 元组进行json转换后,会转换为列表
res = json.dumps((1, 2, 3))
print(res) # "[1, 2, 3]"
lst = json.loads(res)
print(type(lst)) # <class 'list'>
print(lst) # [1, 2, 3] res = json.dumps([1, 2, 3, 4])
print(res) # "[1, 2, 3, 4]" res = json.dumps({"name":"张三", "age": 20})
print(res) # "{"name": "\u5f20\u4e09", "age": 20}" # set不能转换成json字符串
# res = json.dumps(set("abc"))
# print(res) # TypeError: Object of type 'set' is not JSON serializable
# tup1 = (1, 2, 3)
# # print(set(tup1))
# res = json.dumps(set(tup1))
# print(res) # dump:从内存到外边 写入到文件使用dump
# dic = {"name":"张三", "age": 20}
# with open("aa.txt", encoding="utf-8", mode="at") as f:
# # json.dump([1, 2, 3], f) # 把列表转换为json字符串,然后写入文件
# json.dump(dic, f) # 反序列化:把json字符串转换成内存中存储的数据类型,如:列表,字符串,字典 # 元组进行json转换后,再次反序列化后显示结果为:列表
# res = json.dumps((1, 2, 3))
# print(res) # "[1, 2, 3]"
# lst = json.loads(res)
# print(type(lst)) # <class 'list'>
# print(lst) # [1, 2, 3] # 从文件中反序列化
# with open("aa.txt", encoding="utf-8") as f1:
# res = json.load(f1) # 不能一次反序列化多次序列化的数据
# print(type(res))
# print(res) # 内存中写入数据
with open("json.str", mode="at", encoding="utf-8") as f:
f.write(json.dumps([1, 2, 3]) + "\n")
f.write(json.dumps({"name":"张三", "age":18}) + "\n") # 从文件中读取数据,转换为内存中存储的数据类型
with open("json.str", encoding="utf-8") as f1:
# res = json.loads(f1.readline().strip())
# print(res)
#
# res = json.loads(f1.readline().strip())
# print(res) for i in f1:
print(json.loads(i.strip()))

pickle

"""
pickle
序列化:可以把python的所有数据类型转换为字节串,
反序列化:将字节串转换为python中的数据类型
常用场景:和json一样,一次性读取,一次写入
""" import pickle
# 序列化元组
byts = pickle.dumps((1,2,3))
print(byts) # b'\x80\x03K\x01K\x02K\x03\x87q\x00.' # 反序列化元组
res = pickle.loads(byts)
print(res) # (1, 2, 3) # 序列化集合
byts = pickle.dumps(set("abc"))
print(byts) # b'\x80\x03cbuiltins\nset\nq\x00]q\x01(X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03X\x01\x00\x00\x00cq\x04e\x85q\x05Rq\x06.' # 反序列化集合
res = pickle.loads(byts)
print(res) # {'a', 'b', 'c'} # 使用pickle写入文件 二进制不能指定utf-8编码
with open("pickle.str", mode="ab") as f:
pickle.dump(set("abcd"), f)
pickle.dump({"name":"张三", "age":18}, f) with open("pickle.str", mode="rb") as f1:
for i in range(2):
res = pickle.load(f1)
print(res)

python基础-json、pickle模块的更多相关文章

  1. python基础--json,pickle和shelve模块

    一.JSON &pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换  字符串必须是双引号,不能是单引号 pickle,用于python特有的类型 和 ...

  2. python 基础之pickle 与json 报错问题解决方案

    Python 基础之pickle与json 有没有在搞pickle与json在进行数据储存的时候老是报错,这个有些让人烦恼,在之前有一篇介绍过它们的基本用法以及在使用过长中避免一些坑,但是今天在把对象 ...

  3. python之os与json&pickle模块

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

  4. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  5. python基础31[常用模块介绍]

    python基础31[常用模块介绍]   python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...

  6. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

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

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

  8. 【笔记】Python基础六:模块module介绍及常用模块

    一,module模块和包的介绍 1,在Python中,一个.py文件就称之为一个模块(Module). 2,使用模块的好处? 最大的好处是大大提高了代码的可维护性 其次,编写代码不必从零开始,我们编写 ...

  9. Python基础5 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

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

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

随机推荐

  1. 答应我,不会这些概念,简历不要写 “熟悉” zookeeper

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问 ...

  2. JSOI 2016 病毒感染 辅助Dp问题

    原题链接:https://www.luogu.com.cn/problem/P5774 分析 直接看这道题,第一个困惑点,那个绝对值的比较是什么东西,根据数学知识,我们可以知道这个意思是k到i的距离小 ...

  3. 一夜搞懂 | JVM 类加载机制

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图 一.为什么要学习类加载机制? 今天想跟大家唠嗑唠嗑Java的类加载机制,这是Java的一个很重要的创 ...

  4. 面试刷题30:SpringBean的生命周期?

    spring是Java软件开发的事实标准. 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程), ...

  5. iOS 架构

    一.MVC MVC 全名 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离 ...

  6. Spring中的设计模式:模板模式

    导读 模板模式在是Spring底层被广泛的应用,比如事务管理器的实现,JDBC模板的实现. 文章首发于作者的微信公众号[码猿技术专栏] 今天就来谈谈「什么是模板模式」.「模板模式的优缺点」.「模板模式 ...

  7. OpenWrite技术自媒体界的JVM一次编辑、随处发布

    原文 :https://mp.weixin.qq.com/s/KUtJ2dwhBRuJ2G_-PkQFEA 最懂你的科技自媒体管理平台 [实用小工具推荐]给科技或技术同学们推荐一款比较好用的工具,可以 ...

  8. 实战级Stand-Alone Self-Attention in CV,快加入到你的trick包吧 | NeurIPS 2019

    论文提出stand-alone self-attention layer,并且构建了full attention model,验证了content-based的相互关系能够作为视觉模型特征提取的主要基 ...

  9. jQuery学习笔记01

    1.jQuery介绍 1.1什么是jQuery ? jQuery,顾名思义,也就是JavaScript和查询(Query),它就是辅助JavaScript开发的js类库. 1.2 jQuery核心思想 ...

  10. SpringBoot 入门:项目属性配置

    开发一个SpringBoot 项目,首当其冲,必然是配置项目 一.项目属性配置 1. SpringBoot自带了Tomcat服务器,通过使用项目配置文件来修改项目的配置,如图配置了部署在80端口,目录 ...