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的及其相似

目录
相关文章
|
10天前
|
存储 安全 Java
Java一分钟之-Java序列化与反序列化
【5月更文挑战第14天】Java序列化用于将对象转换为字节流,便于存储和网络传输。实现`Serializable`接口使类可被序列化,但可能引发隐私泄露、版本兼容性和性能问题。要避免这些问题,可使用`transient`关键字、控制`serialVersionUID`及考虑使用安全的序列化库。示例代码展示了如何序列化和反序列化对象,强调了循环引用和未实现`Serializable`的错误。理解并妥善处理这些要点对优化代码至关重要。
19 1
|
10天前
|
JSON 安全 Java
Spring Boot 序列化、反序列化
本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
73 2
|
1天前
使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案
使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案
6 0
|
2天前
|
前端开发 数据库
省市区三级联动数据本地序列化和反序列化
省市区三级联动数据本地序列化和反序列化
5 0
|
2天前
对象数组序列化和反序列化
对象数组序列化和反序列化
7 1
|
10天前
|
存储 JSON 数据挖掘
python序列化和结构化数据详解
python序列化和结构化数据详解
17 0
|
10天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
30 0
|
10天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
24 2
|
10天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
10天前
|
存储 JSON PHP
python序列化与反序列化
python序列化与反序列化