首页 > 其他 > 详细

序列化与反序列化

时间:2019-01-07 22:22:19      阅读:230      评论:0      收藏:0      [点我收藏+]

废话不要多说了,直接记笔记吧!

网络上传输的数据都是byte类型的。也就是二进制。

我用python写下来的代码都是ascii 码转换过后的,人能看懂的代码!

假如,我玩了一款网络游戏,那么我存档之后,我身上的装备包括等级等等都会保存到本地的文档和网络上的服务器,那么假如我的游戏是用python写的,需要传送到服务器,就只能把文档转换成字符串,那么python提供了三个文档转成字符串的模块。

  第一个  json   重要程度   五个星

 第二个  pickle                 四个星

  第三个  shelve              三个星     新出的一个模块

  json   可以转化  数字  字符串   列表 字典 元祖

          厉害之处在于  是通用的序列化格式

   缺陷     只有很少的一部分数据类型可以转化

 pickle      所有的python   中的数据类型都可以转化成字符串形式

    缺点        pickle 序列化的内容只能python  可以理解

        部分反序列化以来python代码

shelve   序列化句柄

     优点    直接使用句柄操作  非常方便

    缺点    只有python能懂

 

json   有四种方法    json.dumps    json.loads          这是一对序列化和反序列化    针对非文件操作使用  (当然如果使用这一对方法的话 可以一条一条的输入到文件当中  也可以一条条的读取出来)

         json,dump    json.load

import json

dic_1 = [{‘k1‘:1,‘k2‘:2}]
# ret = json.dumps(dic_1)
#
# print(ret,type(ret))
#
# ret_1 = json.loads(ret)
#
# print(ret_1,type(ret_1))

# f = open(‘fff‘,‘w‘,encoding=‘utf-8‘)
# json.dump(dic_1,f) 有两个参数 第一个参数是需要序列化的对象 第二个参数是文件的句柄
# f.close()

f = open(‘fff‘,encoding=‘utf-8‘)
ret = json.load(f) 填写一个参数 文件的句柄 但是反序列化之后有一个返回值 需要接受
print(ret,type(ret))
f.close()
  json  序列化与反序列化是一次性针对所有的内容   所以需要考虑内存的问题!






import json
# json dump load
# dic = {1:"中国",2:‘b‘}
# f = open(‘fff‘,‘w‘,encoding=‘utf-8‘)
# json.dump(dic,f,ensure_ascii=False)
# json.dump(dic,f,ensure_ascii=False)
# f.close()
# f = open(‘fff‘,encoding=‘utf-8‘)
# res1 = json.load(f)
# res2 = json.load(f)
# f.close()
# print(type(res1),res1)
# print(type(res2),res2)

# json
# dumps {} -- > ‘{}\n‘
# 一行一行的读
# ‘{}\n‘
# ‘{}‘ loads
# l = [{‘k‘:‘111‘},{‘k2‘:‘111‘},{‘k3‘:‘111‘}]
# f = open(‘file‘,‘w‘)
# import json
# for dic in l:
# str_dic = json.dumps(dic)
# f.write(str_dic+‘\n‘)
# f.close()

# f = open(‘file‘)
# import json
# l = []
# for line in f:
# dic = json.loads(line.strip())
# l.append(dic)
# f.close()
# print(l)



import pickle
# dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}
# str_dic = pickle.dumps(dic)
# print(str_dic) #一串二进制内容
#
# dic2 = pickle.loads(str_dic)
# print(dic2) #字典

# import time
# struct_time1 = time.localtime(1000000000)
# struct_time2 = time.localtime(2000000000)
# f = open(‘pickle_file‘,‘wb‘)
# pickle.dump(struct_time1,f)
# pickle.dump(struct_time2,f)
# f.close()
# f = open(‘pickle_file‘,‘rb‘)
# struct_time1 = pickle.load(f)
# struct_time2 = pickle.load(f)
# print(struct_time1.tm_year)
# print(struct_time2.tm_year)
# f.close()

# import shelve
# f = shelve.open(‘shelve_file‘)
# f[‘key‘] = {‘int‘:10, ‘float‘:9.5, ‘string‘:‘Sample data‘} #直接对文件句柄操作,就可以存入数据
# f.close()
#
# import shelve
# f1 = shelve.open(‘shelve_file‘)
# existing = f1[‘key‘] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
# f1.close()
# print(existing)

# import shelve
# f = shelve.open(‘shelve_file‘, flag=‘r‘)
# existing = f[‘key‘]
# print(existing)
#
# f.close()
#
# f = shelve.open(‘shelve_file‘, flag=‘r‘)
# existing2 = f[‘key‘]
# f.close()
# print(existing2)

import shelve
# f1 = shelve.open(‘shelve_file‘)
# print(f1[‘key‘])
# f1[‘key‘][‘new_value‘] = ‘this was not here before‘
# f1.close()

f2 = shelve.open(‘shelve_file‘, writeback=True)
print(f2[‘key‘])
# f2[‘key‘][‘new_value‘] = ‘this was not here before‘
f2.close()


讲真 时间紧 我直接把代码复制到博客当中了,我去python解释器当中试试 明日再继续记!!!! 2019-1-7 21.46


 

序列化与反序列化

原文:https://www.cnblogs.com/dtaxx-99/p/10235873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!