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'】