Python基础-序列化模块

序列化模块

1. 认识序列化

1.1 什么叫序列化

  数据类型 ---> 字符串的类型 叫做序列化(字符串化)

1.2 为什么要用序列化模块

  数据从内存到文件 固态存储

  数据在网络上传输  字节 - 自防护窜 -字典 网络传输

1.3 python中的序列化模块有哪些

  json 通用的  支持的数据类型有list tuple dict

  pickle  python中通用的,支持几乎所有python中的数据类型

  shelve  py3中不是很好用,使用便捷

1.3.1 json

基于内存  dumps loads

import json
dic = {"k":'v'}
print(type(dic))
json_dic = json.dumps(dic)   # 字典转字符串的过程 ——序列化
print(json_dic)
print(dic)
print(type(json_dic))
print(json.loads(json_dic)) # 字符串 转回其他数据类型 —— 反序列化

基于文件 dump load

import json
dic = {"k":'v'}

with open('d','w') as f:
    json.dump(dic,f)       # dump是和文件交互的
    # json.dump(dic,f)       # 连续dump两次,load会报错。

with open('d') as f:
    print(json.load(f))      # 从文件中反序列化


# 如果要dump多条数据
# 每一条数据线dumps一下 变成字符串 然后打开文件 write写进文件里 \n
# 读取的时候按照标志读取或者按行读
# 读出来之后 再使用loads

with open('aaa','w') as f:
    str_dic = json.dumps(dic)
    f.write(str_dic+'\n')
    f.write(str_dic+'\n')
    f.write(str_dic+'\n')
    f.write(str_dic+'\n')

with open('aaa') as f:
    for line in f:
        print(json.loads(line.strip()))

1.3.2 pickle

import pickle
class A:
    def __init__(self,name):
        self.name = name

alex = A('alex')
print(pickle.dumps(alex))  # b'\x80\x03c__main__\nA\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00nameq\x03X\x04\x00\x00\x00alexq\x04sb.'
with open('bbb','wb') as f:
    pickle.dump(alex,f)
    pickle.dump(alex,f)
    pickle.dump(alex,f)

#  pickle可以直接多次dump和load,但是load完数据之后再执行load,会报错。这里使用异常处理try:
with open('bbb','rb') as f: while True: try: obj = pickle.load(f) print(obj.name) except EOFError: break

1.pickle支持更多的数据类型
2.pickle的结果是二进制
3.pickle在和文件交互的时候可以被多次load

1.3.3  shelve

不支持多个对象同时写一个文件的操作  很少用

友情链接 :

http://www.cnblogs.com/Eva-J/articles/7228075.html#_label9

 

 

猜你喜欢

转载自www.cnblogs.com/wangph/p/9069280.html
今日推荐