python基础-json、pickle模块
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模块的更多相关文章
- python基础--json,pickle和shelve模块
一.JSON &pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 字符串必须是双引号,不能是单引号 pickle,用于python特有的类型 和 ...
- python 基础之pickle 与json 报错问题解决方案
Python 基础之pickle与json 有没有在搞pickle与json在进行数据储存的时候老是报错,这个有些让人烦恼,在之前有一篇介绍过它们的基本用法以及在使用过长中避免一些坑,但是今天在把对象 ...
- python之os与json&pickle模块
一.os模块 简单概述一下os模块就是与操作系统交互的一个接口 import os #os.getcwd() print(os.getcwd()) # 获取到当前工作目录 # 运行结果:E:\pyt ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- python基础31[常用模块介绍]
python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...
- Day5 - Python基础5 常用模块学习
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...
- Pythoy 数据类型序列化——json&pickle 模块
Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...
- 【笔记】Python基础六:模块module介绍及常用模块
一,module模块和包的介绍 1,在Python中,一个.py文件就称之为一个模块(Module). 2,使用模块的好处? 最大的好处是大大提高了代码的可维护性 其次,编写代码不必从零开始,我们编写 ...
- Python基础5 常用模块学习
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- 20181205(模块循环导入解决方案,json&pickle模块,time,date,random介绍)
一.补充内容 循环导入 解决方案: 1.将导入的语句挪到后面. 2.将导入语句放入函数,函数在定义阶段不运行 #m1.pyprint('正在导入m1') #②能够正常打印from m2 imp ...
随机推荐
- ThreadPoolTaskExecutor 中 corePoolSize vs. maxPoolSize
1. 概览 Spring中的 ThreadPoolTaskExecutor 是一个 JavaBean ,提供围绕java.util.concurrent.ThreadPoolExecutor 的抽象实 ...
- elasticsearch实战(1)-单机快速部署
1. 场景描述 elasticsearch只用过,没有部署或者维护过,从头完整走一遍,记录下,原创实战,有需要的朋友参考下. 2 . 解决方案 特别说下,以前win7下安装的3台虚拟机,没有联网,因为 ...
- 使用室内三维地图引擎ESMap来管理摄像头设备、消防设备和人员轨迹展示
目前室内三维地图如何轻量化,能够在手机微信.电脑浏览器等平台快速显示地图,显示的地图性能好,转动地图不卡是大家都要面对的问题, 使用室内三维地图引擎ESMap后目前可以不用操心这方面的问题,开发只需要 ...
- django中 对Mysql数据库的建表
Django操作Mysql数据库: 1.1 在settings中,配置数据库相关参数,所以无需修改,这里我们看一下: DATABASES = { 'default': { # 这里可以指定使用的数据库 ...
- CentOS76 安装k8s1.18的简单步骤
1. 前提条件就不再详细描写了: 关闭防火墙 升级内核到至少4. 关闭swap 关闭selinux 等 2. 本次安装采用酸酸乳和privoxy的方式进行, 不过发现部分rpm 包还是特别慢,没办法用 ...
- 模块 序列化 json pickle shelv xml
序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. json 模块 json.dump(d,f) json.load(f ...
- java 下载与配置环境变量
第一:JDK下载 地址:https://www.java.com/zh_CN/download/win10.jsp 注意:自己载点击安装jdk的时候留意一下自己的安装地址,下一步要用: 第二:环 ...
- API参数如何验证?别纠结,拿去用就是
今天我们主要分享项目实战中,另一种常用的参数校验框架 Hibernate Validator,请准备好小板凳,我们的分享开始. 1. 是啥? 先抛一张图,锻炼一下你的观察力. 通过上图有没有发现,数据 ...
- 面试常问的 Java 虚拟机运行时数据区
写在前面 本文描述的有关于 JVM 的运行时数据区是基于 HotSpot 虚拟机. 概述 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...
- new FileReader()
一.调用FileReader对象的方法 方法名 参数 描述abort none 中断读取readAsBinaryString file 将文件读取为二进制码readAsDataURL file 将文件 ...