pickle:序列化

pickle是python种内置的一个模块,

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

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

pickle.dumps( ):转化为数据

L- 序列化 - 图1```python import pickle

  1. # 将对象(变量)类型为字典的值转化为(二进制的纯数据)

d = {“NAME”:”Hibari”, “UID”:”7565634”, “TIME”:”20200209”} data = pickle.dumps(d)

print(data) # 将(二进制的纯数据)值打印出来 print(type(data))

  1. ```python
  2. #输出(用16进制表示)
  3. #=============================
  4. 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.'
  5. <class 'bytes'>

写入到文件

  1. import pickle
  2. d = {"NAME":"Hibari", "UID":"7565634", "TIME":"20200209"}
  3. # 注意:文件模块请使用"wb"表示写入(二进制的纯数据)
  4. with open("E:\MyFile.txt", 'wb') as f:
  5. data = pickle.dumps(d) # 将对象(变量)类型为字典的值转化为(二进制的纯数据)
  6. f.write(data) # 将(二进制的纯数据)值保存到文件中
  7. #pickle.dumps(d , f) # 该语句代替上面两个语句
  8. f.close()

输出: 由于记事本是由unicode编码控制的,而存入的是数据,而不是带字符编码的字符串, 因此数据被转化成unicode编码就发生了乱码的情况。

QQ截图20210209213443.png

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

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

L- 序列化 - 图3```python

以上面案例导出的文件为读取基础

======================================

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()

  1. ```python
  2. #输出
  3. #==========================================
  4. {'NAME': 'Hibari', 'UID': '7565634', 'TIME': '20200209'}

JSON:轻量通用数据类型

JavaScript Object Notation

JSON是啥? JSON是和pickle类似的玩意

为什么要用JSON? 当数据要在程序与程序之间交流,不同语言之间交流时, pickle所导出的数据不具有通用性(是外语,除了Python自己别人看不懂) 而JSON是以类似编程语言的储存方式储存字符串的

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

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

  1. {
  2. "myName": "Hibari",
  3. "myUID": [7, 5, 6, 5, 6, 3, 4],
  4. "myTime": {"DAY":10, "month":02, "Year":"2021"},
  5. "myBool": True,
  6. "myNone": null
  7. }

json.dumps( ):转化成字符串

注意: 使用json储存数据,通常是将所有的数据需要放在一个字典中 一般设变量名为键,变量的值为键值

作用: 将值转化为字符串

官方文档: (懒得抄了,列几个常用的就好了) https://docs.python.org/zh-cn/3/library/json.html#json.dumps

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

L- 序列化 - 图4```python import json d = {“NAME”:”Hibari”, “UID”:7565634, “TIME”:”20200209”} data = json.dumps(d, sort_keys=True, indent=4, separators=(‘,’, ‘: ‘)) print(data) print(type(data))

  1. ```python
  2. #输出
  3. #==========================================
  4. {
  5. "NAME": "Hibari",
  6. "TIME": "20200209",
  7. "UID": 7565634
  8. }
  9. <class 'str'>

保存到文件

  1. import json
  2. d = {"NAME":"Hibari", "UID":7565634, "TIME":"20200209"}
  3. data = json.dumps(d, sort_keys=True, indent=4, separators=(',', ': '))
  4. with open("E:\MyFile.txt", 'w') as f:
  5. f.write(data)
  6. f.close()

输出 QQ截图20210210074559.png

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

作用:将字符串转化回去

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