Python--序列化与反序列化

简介: Python--序列化与反序列化

前言

「序列化:把内存中的数据类型转换成一种特定格式,这种特定格式可以用于存储或者传输给其他平台
内存中的数据类型-----》序列化---》特定格式(json/pickle)
内存中的数据类型《-----反序列化<----特定格式(json/pickle)」

「用途:
1、存储
2、跨平台数据交互」

json
import json
dic = {"name":'拾贰','age':18,'hobby':['篮球'],'Python':True}
json_dic = json.dumps(dic)
print(json_dic)
"""
{"name": "\u62fe\u8d30", "age": 18, "hobby": ["\u7bee\u7403"], "Python": true}
"""

可以看到这里汉字是unicode编码的,看如下:

import json
dic = {"name":'拾贰','age':18,'hobby':['篮球'],'Python':True}
json_dic = json.dumps(dic,ensure_ascii=False)
print(json_dic,type(json_dic))
"""
{"name": "拾贰", "age": 18, "hobby": ["篮球"], "Python": true} <class 'str'>
"""

「注意看符号,由单引号,变成了双引号。类型与就是字符串形式的。 json只是数据格式。规定了True或者False要用小写的形式,以及""形式」

序列化/反序列化第一种

import json
dic = {"name":'拾贰','age':18,'hobby':['篮球'],'Python':True}
json_dic = json.dumps(dic)
with open('json_.json',mode='wt',encoding='utf-8') as j:
    json_write = j.write(json_dic)
# 反序列化
with open('json_.json',mode='rt') as r:
    json_read = json.loads(r.read())
    print(json_read)

这里对比上面,我将ensure_ascii=False去掉了,再反序列化后,这要与不要都可以。只是写入文本后展示的不一样,不要ensure_ascii=False,写入json就是unicode编码的。

反序列化用的loads方法, 别搞混了

反序列化

import json
dic = {"name":'拾贰','age':18,'hobby':['篮球'],'Python':True}
with open('json_1.json',mode='wt',encoding='utf-8') as j:
    json.dump(dic,j)    # 一步到位,自动调用dumps然后调用j完成序列化
with open('json_.json',mode='rt') as r:
    print(json.load(r))

「ensure_ascii=False依旧可以添加到序列化中去,只是我没有添加。第二种方法,先对于第一种,代码上简化了一些」

反序列化第三种

with open('json_.json',mode='rb') as r:
    # print(json.load(r))
    print(json.loads(r.read()))

「这里的mode是二进制的,需要注意一下」

值得注意的是,python的集合,是不被允许序列化的。、

set_ = {1,2,3}
json.dumps(set_)
"""
TypeError: Object of type set is not JSON serializable
"""

pickle

常用于存档

第一种

import pickle
dic = {"name":'拾贰','age':18,'hobby':['篮球'],'Python':True,"set":{1,2,3}}
pickle_dic = pickle.dumps(dic,protocol=0)
with open('pickle_.pickle',mode='wb') as w:
    w.write(pickle_dic)
with open('pickle_.pickle',mode='rb') as r:
    read_pickle = pickle.loads(r.read())
    print(read_pickle)

值得注意的是,这里我添加了集合进来。需要用二进制写入。protocol=0,保证写入后不出现乱码的情况 注意文件的后缀名是pickle

第二种

import pickle
dic = {"name":'拾贰','age':18,'hobby':['篮球'],'Python':True,"set":{1,2,3}}
with open('pickle_.pickle',mode='wb') as r:
    pickle.dump(dic,r,protocol=0)
with open('pickle_.pickle',mode='rb') as r:
    read_pickle = pickle.load(r)
    print(read_pickle)

与json的及其相似

目录
相关文章
|
5天前
|
存储 安全 Java
Java一分钟之-Java序列化与反序列化
【5月更文挑战第14天】Java序列化用于将对象转换为字节流,便于存储和网络传输。实现`Serializable`接口使类可被序列化,但可能引发隐私泄露、版本兼容性和性能问题。要避免这些问题,可使用`transient`关键字、控制`serialVersionUID`及考虑使用安全的序列化库。示例代码展示了如何序列化和反序列化对象,强调了循环引用和未实现`Serializable`的错误。理解并妥善处理这些要点对优化代码至关重要。
15 1
|
5天前
|
JSON 安全 Java
Spring Boot 序列化、反序列化
本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
67 2
|
5天前
|
存储 JSON 数据挖掘
python序列化和结构化数据详解
python序列化和结构化数据详解
15 0
|
5天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
28 0
|
5天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
23 2
|
5天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
5天前
|
存储 JSON PHP
python序列化与反序列化
python序列化与反序列化
|
5天前
|
存储 Java 测试技术
滚雪球学Java(22):序列化和反序列化
【4月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
35 1
滚雪球学Java(22):序列化和反序列化
|
5天前
|
SQL 存储 安全
每日一道面试题:Java中序列化与反序列化
每日一道面试题:Java中序列化与反序列化
13 0
|
5天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
28 5