第31天 | 32天学会python, 序列化和反序列化

  • Post author:
  • Post category:python


怎么将数据写到内存中?

# 将数据写入到内存:stringIO和BytesIO
from io import StringIO
甲 = StringIO()
甲.write('hello')
甲.write('good')
甲.write('你好!')
print(甲.getvalue())  # hellogood你好!
甲.close()

什么是序列化?

1.序列化:将数据从内存持久化保存到硬盘的过程
2.反序列化:将数据从硬盘加载到内存的过程
import  json
# 1.序列化:将数据从内存持久化保存到硬盘的过程

# write只能写字符串或则二进制;字典/列表/数字等都不能直接写入到文件里
# 如果非要写入有两种思路:1.将数据转换为字符串(repr/str/使用json模块) 2.将数据转换为二进制
file = open('names.txt','w',encoding='utf8')
# file.write(12) # 往文件写数字会报错
names = ['丁义珍','高育良','李达康','沙瑞金','高小琴',500000]

# json里将数据持久有两个方法:
# 1).dump将数据转换成为json字符串的同时写入到指定文件
json.dump(names,file)
file.close()
# 2).dumps:将数据转换成为json字符串,不会将数据保存到文件里
甲 = json.dumps(names)  # dumps的作用是将数据转换成为字符串
print(甲)
file.write(甲) # 转换之后就能写入文件了
file.close()

# 2.反序列化:将数据从硬盘加载到内存的过程
# json 反序列化也体验两个方法:
# 1).loads将json字符串加载成为Python里的数据
丁 = '{"name":"zhangsan","age":18}'  #符合json规则的字符串
戊 = json.loads(丁)
print(戊)  # {'name': 'zhangsan', 'age': 18} json转换成了字典
print(戊['name'])  # zhangsan 说明是个字典
# 2).load:读取文件,把读取的内容(字符串格式)加载成为Python里的数据
庚 = open('names.txt','r',encoding='utf8')
己 = json.load(庚)
print(己)  # ['丁义珍', '高育良', '李达康', '沙瑞金', '高小琴', 500000]
print(己[0]) # 丁义珍 说明是个列表
庚.close()


pickle模块

# Python: 里存入数据只支持存入 字符串 和 二进制
# json: 将Python里的数据(str/list/tuple/dict/int/float/bool/None)等转换成为对应的json格式
# pickle: 将Python里任意的对象转换成为二进制
import pickle
# 1.序列化
# 1.1 dumps:将Python数据转换成为二进制
names = ['张三','李四','杰克','亨利']
甲 = pickle.dumps(names)
print(甲)

乙 = open('names.txt','wb')
乙.write(甲)  # 写入的是二进制,不是存文本,所以如果直接打开看到的是乱码
乙.close()

丙 = open('names.txt','rb')
丁 = 丙.read()  # 读出来也是二进制,怎么转换成列表呢?下面的反序列化

# 2.反序列化
# 2.1 loads:将二进制加载成为Python数据
print(pickle.loads(丁))  # ['张三', '李四', '杰克', '亨利']  转换成Python数据列表
丙.close()

# 1.2 dump:将Python数据转换成为二进制,同时保存到指定文件
戊 = ['丁义珍','高育良','李达康','沙瑞金','高小琴',500000]
己 = open('names.txt','wb')
pickle.dump(戊,己) # 已二进制写入指定文件
己.close()

# 2.2 load:读取文件,并将文件的二进制内容加载成Python数据
class dog(object):
    def __init__(self,name,color):
        self.name = name
        self.color = color
    def eat(self):
        print(self.name + '正在吃东西')
辛 = dog('大黄','白色')  # 辛是个类对象
print(辛)
庚 = open('dog.txt','wb')
pickle.dump(辛,庚)  # 先写进文件
庚.close()

癸 = open('dog.txt','rb')
print(癸)
壬 = pickle.load(癸)  # 再读出文件里内容
print(壬.name,壬.color)  # 大黄 白色
癸.close()
辛.eat()  # 大黄正在吃东西




版权声明:本文为qq_42724611原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。