【Python-基础】O/I——序列化讲解知识

本文介绍了Python的pickle模块用于对象的序列化和反序列化,以及JSON格式的使用。pickle.dumps()和pickle.load()分别用于将对象转换为二进制数据和从二进制数据还原对象。而JSON是一种轻量级的数据交换格式,适用于跨语言数据交流,json.dumps()和json.loads()则用于字符串的转换。文章通过实例展示了两者在数据保存和读取过程中的应用。
摘要由CSDN通过智能技术生成


pickle:序列化
pickle是python种内置的一个模块,

作用:    保存时将对象储存在内存中的信息转化成十六进制(纯数据)

读取时将十六进制数据转化成对象储存在内存中的信息

pickle.dumps( ):将对象转化为数据

pickle.load( ):将文件中数据转化为对象

pickle.dumps( ):转化为数据

import pickle
                    # 将对象(变量)类型为字典的值转化为(二进制的纯数据)
d = {"NAME":"Hibari", "UID":"7565634", "TIME":"20200209"}
data = pickle.dumps(d)

print(data)         # 将(二进制的纯数据)值打印出来
print(type(data))
#输出(用16进制表示)
#=============================
b'\x80\x03}q\x00(X\x04\x00\x00\x00NAMEq\x01X\x06\x00\x00\x00Hibariq\x02X\x03\x00\x00\x00UIDq\x03X\x07\x00\x00\x007565634q\x04X\x04\x00\x00\x00TIMEq\x05X\x08\x00\x00\x0020200209q\x06u.'
【class 'bytes'】
写入到文件

import pickle
d = {"NAME":"Hibari", "UID":"7565634", "TIME":"20200209"}

                                # 注意:文件模块请使用"wb"表示写入(二进制的纯数据)
with open("E:\MyFile.txt", 'wb') as f:
    data = pickle.dumps(d)      # 将对象(变量)类型为字典的值转化为(二进制的纯数据)
    f.write(data)               # 将(二进制的纯数据)值保存到文件中

    #pickle.dumps(d , f)        # 该语句代替上面两个语句
    f.close()
输出:

由于记事本是由unicode编码控制的,而存入的是数据,而不是带字符编码的字符串,

因此数据被转化成unicode编码就发生了乱码的情况。


pickle.load( ):将数据导回对象


pickle.load( )可以把文件里的数据还原回去


# 以上面案例导出的文件为读取基础
#======================================
import pickle                   # 注意:文件模块请使用"rb"表示读取(二进制的纯数据)
with open("E:\MyFile.txt", 'rb') as f:
    try:
        data = pickle.load(f)   # 读取数据并还原到data里
        print(data)
    except EOFError:            # 如果文件为空,则返回提示
        print("数据不存在", e)
    finally:
        f.close()
#输出
#==========================================
{'NAME': 'Hibari', 'UID': '7565634', 'TIME': '20200209'}
JSON:轻量通用数据类型
JavaScript Object Notation

JSON是啥?

JSON是和pickle类似的玩意

为什么要用JSON?

当数据要在程序与程序之间交流,不同语言之间交流时,

pickle所导出的数据不具有通用性(是外语,除了Python自己别人看不懂)

而JSON是以类似编程语言的储存方式储存字符串的

特点:

json类似字典,是以键值对应的方式储存的

JSON的数据类型:

json的数据类型和python的基本一致,只有None要改成null

{
    "myName": "Hibari",
    "myUID": [7, 5, 6, 5, 6, 3, 4],
    "myTime": {"DAY":10, "month":02, "Year":"2021"},
    "myBool": True,
    "myNone": null
}
json.dumps( ):转化成字符串


注意:

使用json储存数据,通常是将所有的数据需要放在一个字典中

一般设变量名为键,变量的值为键值

作用:

将值转化为字符串

官方文档:

(懒得抄了,列几个常用的就好了)

https://docs.python.org/zh-cn/3/library/json.html#json.dumps

import json
d = {"NAME":"Hibari", "UID":7565634, "TIME":"20200209"}
with open("E:\MyFile.txt", 'rb') as f:
    data = json.dumps(d)    # 转化成字符串
    print(data)
    print(type(data))
#输出
#==========================================
{"NAME": "Hibari", "UID": 7565634, "TIME": "20200209"}

import json
d = {"NAME":"Hibari", "UID":7565634, "TIME":"20200209"}
data = json.dumps(d, sort_keys=True, indent=4, separators=(',', ': '))
print(data)
print(type(data))
#输出
#==========================================
{
    "NAME": "Hibari",
    "TIME": "20200209",
    "UID": 7565634
}
【class 'str'】


保存到文件

import json
d = {"NAME":"Hibari", "UID":7565634, "TIME":"20200209"}
data = json.dumps(d, sort_keys=True, indent=4, separators=(',', ': '))

with open("E:\MyFile.txt", 'w') as f:
    f.write(data)
    f.close()


json.loads( ):将字符串转回对象


作用:将字符串转化回去

# 以上面案例导出的文件为读取基础
#======================================
import json
with open("E:\MyFile.txt", 'r') as f:
    data = f.read()
    d = json.loads(s)
    print(d)
    print(type(d))
    f.close()
#输出
#==========================================
{'NAME': 'Hibari', 'TIME': '20200209', 'UID': 7565634}
【class 'dict'】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值