废话不要多说了,直接记笔记吧!
网络上传输的数据都是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