当前位置: 首页 > 编程日记 > 正文

十三、序列化和反序列化(部分转载)

json和pickle序列化和反序列化
json是用来实现不同程序之间的文件交互,由于不同程序之间需要进行文件信息交互,由于用python写的代码可能要与其他语言写的代码进行数据传输,json支持所有程序之间的交互,json将取代XML,由于XML格式稍微比较复杂。现在程序之间的交互都是用json来进行文件信息的交互。
在使用json序列化和反序列化的时候,dump一次,就要load一次,不能操作。

json序列化的过程,就是写入文件中,让另外一个编程语言进行调用:
import json
info = {"alex":"sb","test":"hard"}
with open("file","w") as f:
f.write(json.dumps(info))
上述代码使用json将info字典信息写入到一个文件中,文件中只能存储字符串格式的信息,或者二进制文件的信息,不能存放数字等信息,放入文件中的信息都是字符串类型的,这点一定要注意.
json反序列化的过程:
import json
'''反序列化起始就是把dump进去的信息进行提取,以实现不同编程语言的交互'''
with open("file","r") as f:
data = json.loads(f.read())
print(data)
print(type(data))
print(data["alex"])
上面代码,将使用json格式存入的信息读取出来,如下所示:
{'test': 'hard', 'alex': 'sb'}
<class 'dict'>
sb
上述代码实现了将字符串信息读取问字典的功能,其实,序列化和反序列化就是将原来的格式先转化为字符串,然后在读取出来的过程,以便能够实现交互.
我们也可以使用其他方式进行序列化和反序列化,我们知道,有一个函数eval(),能够实现把字符串信息转化为原本样式,如下:
info = [11,22,33,65,33]
with open("test.text","w") as f:
f.write(str(info)) #使用wirte()只能向文件中写入字符串格式的信息,不能写入其他类型的信息
with open("test.text","r") as f_obj:
data = f_obj.read()
data = eval(data)
print(type(data))
print(data)
程序运行如下:
<class 'list'>
[11, 22, 33, 65, 33]
上述过程中,我们利用python自带的eval()函数也实现了序列化和反序列化的过程,但是由于序列化和反序列化是在同一个程序中实现的,在其他程序中有没有eval()是不确定的,但是json支持所有的编程语言,所以现在一般都使用json实现不同编程语言之间的信息交互.
dump和load也是实现上面dumps和loads的功能,只是实现的方式不一样而言,语法稍微有一些区别,如下:
dump序列化:
import json
info = {"alex":"sb","test":"hard"}
with open("file","w") as f:
json.dump(info,f)
load()反序列化:
import json
'''反序列化起始就是把dump进去的信息进行提取,以实现不同编程语言的交互'''
with open("file","r") as f:
data = json.load(f)
print(data)
print(type(data))
print(data["alex"])
上面程序实现了序列化和反序列化的功能,dump(信息,文件路径),load(文件路径),从哪个文件读取信息.
在不同程序间实现数据的交换.
不同程序之间的数据交换,或者是将字符串的信息转化为原有的形式;
eval()函数的功能也很强大,能够之间将字符串形式的信息转化为原有的信息,如下:
>>> dic = "{'alex':'sb','try':'workhard'}"
>>> data = eval(dic)
>>> data
{'try': 'workhard', 'alex': 'sb'}
程序只dump一次,load一次,不能dump多次.dumps好几个文件实现;
以上的json的内容原文件转载地址https://www.cnblogs.com/yanglang/p/7119992.html
pickle序列化和反序列化:
pickle可以序列化和反序列化python语言中的所有类型,但是只能在python中使用:
pickle模块有四个功能:dumps、dump、loads、load    (json也有这四个功能)
import time,pickle
date = time.time()
p_str = pickle.dumps(date)        #将数据转换成只有python语言认识的字符串
print(p_str)
with open('F:\\repository\test.txt','wb')    as   p_file:            #使用二进制方式存储
pickle.dump(date,p_file)           #将数据转成成只有python语言认识的字符串,并写入到文件中。

转载于:https://www.cnblogs.com/caibaofei/p/9018610.html

相关文章:

【C++】google gflags详解

参考博客&#xff1b;https://blog.csdn.net/lezardfu/article/details/23753741 0、简介 gflags是google的一个开源的处理命令行参数的库&#xff0c;使用c开发&#xff0c;具备python接口&#xff0c;可以替代getopt。gflags使用起来比getopt方便&#xff0c;但是不支持参数…

何恺明等人新作:效果超ResNet,利用NAS方法设计随机连接网络 | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑译者 | 刘畅编辑 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;受人工设计的启发&#xff0c;用于图像识别的神经网络从简单的链状模型发展为具有多个分支的网络。ResN…

网络规划设计师考试命题模式持续在变   你变不变

命题模式持续在变 你变不变深入分析2009下半年&#xff5e;2010下半年3次网络规划设计师考试试卷中项目管理模块&#xff08;约有5~8题&#xff0c;约占总分数的6.67%~10.67%&#xff09;的命题规律&#xff0c;心中最强烈的一份感觉体现在一个字——变。“变”是事物持续发…

【C++】google glog详解

0、简介 glog是google的日志管理系统&#xff0c;配合gflags库&#xff0c;通过命令行参数管理日志。 源码下载&#xff1a;https://github.com/google/glog ubuntu安装&#xff1a; sudo apt-get install libgoogle-glog*参考博客&#xff1a; https://blog.csdn.net/jcjc91…

仿抖音注册界面制作

话说上次完成了仿抖音我的界面制作之后&#xff0c;今天抽空又把注册界面给做了&#xff0c;还是做了些小改动&#xff0c;将第三方登录去掉了 注册还是老规矩直接奉上psd源码&#xff1a;仿抖音注册界面psd源码 个人博客https://myml666.github.io

00后的AI开发者进阶之道:从入门到鏖战MIT编程大赛 | 人物志

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;当所有中国的高中生都在拼命为跨过高考这道窄门疲惫不堪时&#xff0c;美国的准高中毕业生们也开始申请大学&#x…

js的全部替换函数replaceAll

JS替换功能函数&#xff0c;用正则表达式解决&#xff0c;js的全部替换&#xff0c;学习js的朋友可以参考下。 alert("abacacf".replace(a,9)); alert("abacacf".replace(/a/g,9)); 第一个运行的结果 9bacaf 这个只是替换了第一个 第二个运行的结果 9b9c9f…

【C++】Google Protocol Buffer(protobuf)详解(一)

1、简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准&#xff0c; Protocol Buffers 是一种轻便高效的结构化数据存储格式&#xff0c;可以用于结构化数据串行化&#xff0c;或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通…

python使用difflib对比文件示例

使用difflib模块对比文件内容1 示例&#xff1a;字符串差异对比 vim duibi.py#!/usr/bin/env python # -*- coding: utf-8 -*- import re import os import difflib tex1"""tex1: this is a test for difflib ,just try to get difference of the log 现在试试…

技术大佬们都推荐的vim学习指南来了,值得收藏!

「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑作者 | kbsc13&#xff0c;京东算法工程师&#xff0c;研究领域计算机视觉来源 | 机器学习与计算机视觉&#xff08;ID&#xff1a;AI_Developer&#xff09;编辑 | Jane【导语】在 Linux 下最常使用的文本编辑…

NoSQl分类

2019独角兽企业重金招聘Python工程师标准>>> http://nosql-database.org/ nosql简单分类 类型 部分代表 特点 列存储 hbase cassandra hypertable 顾名思义&#xff0c;是按列存储数据的。最大的特点是方便存储结构化和半结构化数据&#xff0c;方便做数据压缩&…

手撕代码之七大常用排序算法 | 附完整代码

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑0.导语本节为手撕代码系列之第一弹&#xff0c;主要来手撕排序算法&#xff0c;主要包括以下几大排序算法&#xff1a;直接插入排序冒泡排序选择排序快速排序希尔排序堆排序归并排序…

【C++】google gtest 详解

1、参考博客&#xff1b; https://blog.csdn.net/baijiwei/article/details/81265491 https://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 2、编译和安装 $ git clone https://github.com/google/googletest.git $ cd googletest $ mkdir mybuild $ cd mybui…

JS学习笔记之call、apply的用法

1、call和apply的区别 call和apply唯一的区别是传入参数的形式不同。 apply接受两个参数&#xff0c;第一个参数指定了函数体内this对象的指向&#xff0c;第二个参数为一个带下标的集合&#xff0c;可以是数组&#xff0c;也可以是类数组&#xff0c;apply方法会把集合中的元素…

实验LVS+keepalived

lvs说明:目前有三种IP负载均衡技术&#xff08;VS/NAT、VS/TUN和VS/DR&#xff09;&#xff1b;八种调度算法&#xff08;rr,wrr,lc,wlc,lblc,lblcr,dh,sh&#xff09;。在调度器的实现技术中&#xff0c;IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转…

Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver

[TOC] 实时WordCount案例 主要是监听网络端口中的数据&#xff0c;并实时进行wc的计算。 Java版 测试代码如下&#xff1a; package cn.xpleaf.bigdata.spark.java.streaming.p1;import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.spark.Spar…

复旦邱锡鹏教授公布《神经网络与深度学习》,中文免费下载 | 极客头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑整理 | Jane出品 | AI科技大本营优质的人工智能学习资源一直是大家非常关注的&#xff0c;以往我们也推荐过很多优秀的课程、书籍等&#xff0c;不过大多来自国外的名校、名师&#xff0c…

【Qt】信号和槽传递自定义结构体

一、使用信号和槽传递自定义结构体 这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下。 一共有三种方法,可以让结构体在信号和槽之间传递。前两种方法可以让结构体在线程之间传递,最后一种方法只能在同一线程中传递。 Q_DECLARE_METATYPE qRegisterMetaType(推…

Tomcat:Connection reset by peer: socket write error

Connection reset by peer: socket write error错误分析及解决 Connection reset by peer: socket write error错误分析&#xff1a; 常出现的Connection reset by peer: 原因可能是多方面的&#xff0c;不过更常见的原因是&#xff1a; ①&#xff1a;服务器的并发连接数超过…

人脸识别的“生意经”

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | Jeff John Roberts译者 | 孙薇责编 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导语&#xff1a;不经意间&#xff0c;科技公司便拿着你的照片&#xff0c;推…

【Qt】pro中使用DEFINES来实现条件编译

1、pro中使用DEFINES来实现条件编译 在Qt的pro文件中使用DEFINES 来实现类似gcc -D的条件编译功能。 如,在pro中: #定义条件编译宏LAOER DEFINES += LAOER #依赖编译宏LAOER的编译选项: contains(DEFINES, LAOER){message(hello Laoer) } #与编译宏LAOER冲突的编译选项: …

nodejs -- promise的返回

为什么80%的码农都做不了架构师&#xff1f;>>> [javascript] view plain copy const a async () > { return Sequelize.findAll({}) //这里返回一个promise&#xff0c;"aaaaa"也行 } const b async ()>{ const result await a…

SQL 将一列数据转为一行字符串[转]

比如&#xff1a;我用select department,userName from users从表中查询出如下数据department | userName--------------- --------------it it1it it2it it3ur ur1ur ur2我能不能用什么SQL对department进行分组然后变成如下的结果呢&#xff1f;department | userName--------…

【C++】C++11的enum class enum struct和enum

1、问题描述 在走读QtCreator中看到一段代码 在QtCreator-v4.9.2源码中 src\plugins\projectexplorer\projectnodes.h enum class NodeType : quint16 {File 1,Folder,VirtualFolder,Project };以前一直使用enum&#xff0c;这里使用的是enum class&#xff0c;新enum的好处…

浙大首届AI专业本科生将于9月入学,纳入竺院图灵班

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑整理 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;据澎湃新闻报道&#xff0c;浙江大学计算机科学与技术学院副院长、浙江大学人工智能研究所所长吴飞…

解决阿里云无法正常使用samba的问题【转】

转自&#xff1a;https://blog.csdn.net/u011949148/article/details/54311288 昨天在阿里云上申请了一个云服务器&#xff0c;系统用的是ubuntu14.04&#xff0c;由于是免费的&#xff08;初次使用&#xff09;&#xff0c;配置较低&#xff08;单核1G内存&#xff0c;40G硬盘…

Google又放大招:高效实时实现视频目标检测 | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | 陈泰红&#xff0c;算法工程师&#xff0c;研究方向为机器学习、图像处理来源 | 极市平台&#xff08;ID&#xff1a;extrememart&#xff09;图像目标检测是图像处理领域的基础。…

一个java删除文件夹的小方法

java删除文件夹都是从里向外删除&#xff0c;使用递归的方法。public class IO_FILEdemo09 {public static void main(String[] args) {// TODO Auto-generated method stub// 删除目录演示File dir new File("C:\\version1");DeleteAll(dir);}public static void D…

【C++】operator bool() 和 operator const bool() const

1、问题描述 在走读QtCreator源码时&#xff0c;看到如下运算符重载 源码在QtCreator-v4.9.2中 src\plugins\projectexplorer\projectexplorer.h class OpenProjectResult { public:OpenProjectResult(const QList<Project *> &projects, const QList<Project *…

tomcat高并发的配置

以下内容来源于互联网&#xff0c;具体出处不详 据说服务器运行TOMCATJDK环境能负载到动态1W的并发&#xff0c;贴上他的配置&#xff0c;以后有机会在测试&#xff01; java 环境配置&#xff1a; export JAVA_OPTS"-server -Xms8g -Xmx8g -Xss128k -XX:ParallelGCThread…