标签:c_str aaa sql 为什么 定义 模块 json 不能 序列
什么是模块?模块是别人写好的功能放在一个文件里面,分为三种模块:
1.内置模块:安装python解释器的时候一起装上的
2.第三方模块、扩展模块:需要自己安装
3.自定义模块:你写的py文件
序列:列表,元组,字符串,bytes
什么叫序列化:把一个数据类型转换成字符串、bytes类型的过程就是序列化
为什么要把一个数据类型序列化?
{‘name‘:‘路飞‘, ‘sex‘:‘male‘}
当你需要把一个数据类型储存在文件中
当你需要把也给数据类型通过网络传输的时候及不安全的
1.json模块
import json stu = {‘name‘:‘路飞‘, ‘gender‘:‘male‘} ret = json.dumps(stu) # 序列化过程 print(stu, type(stu)) print(ret, type(ret)) # d = json.loads(ret) # 反序列化的过程 # print(‘d-->‘,d,type(d)) # lst = [1,2,3,4,‘aaa‘,‘bbb‘] # ret = json.dumps(lst) # 序列化的过程 # print(lst,type(lst)) # print(ret,type(ret)) # # d = json.loads(ret) # 反序列化的过程 # print(‘d-->‘,d,type(d))
json的优点:
所有的语言都通用
缺点:
只支持非常少的数据类型
在网络操作中,以及多语言环境中,要传递字典、数字、字符串、列表等简单的数据类型的时候使用。
对数据类型的约束很苛刻:
字典的key必须是字符串
只支持:数字,字符串,列表,字典
且所有的字符串都必须是用“”表示
dumps(dic/list) dic/list --> str 序列化方法 loads(str) str --> dic/list 反序列化方法 dump(dic/lst,f) dic/list --> 文件 序列化方法 load(f) 文件 --> dic/list 反序列化方法 多次dump进入文件中的数据load会报错 参数:ensure_ascii=False 希望序列化的中文能以中文的形式被现实并且写到文件中
(1)方法dump load这两个方法,是完全和文件打交道。
# dic = {‘name‘:‘路飞‘,‘sex‘:‘male‘} # with open(‘json_file‘,‘w‘,encoding=‘utf-8‘) as f: # json.dump(dic,f,ensure_ascii=False) # with open(‘json_file‘,‘r‘,encoding=‘utf-8‘) as f: # dic = json.load(f) # print(dic,dic[‘name‘])
(2)能不能多次向同一个文件中dump?可以,但是不能多次load
# dic = {‘name‘:‘路飞‘,‘sex‘:‘male‘} # with open(‘json_file‘,‘w‘,encoding=‘utf-8‘) as f: # json.dump(dic,f,ensure_ascii=False) # json.dump(dic,f,ensure_ascii=False) # json.dump(dic,f,ensure_ascii=False) # json.dump(dic,f,ensure_ascii=False) # json.dump(dic,f,ensure_ascii=False) # with open(‘json_file‘,‘r‘,encoding=‘utf-8‘) as f: # dic = json.load(f)
(3)有需求要向文件中写入多个字典
# def my_dumps(dic): # with open(‘json_file‘, ‘a‘, encoding=‘utf-8‘) as f: # dic_str = json.dumps(dic) # f.write(dic_str + ‘\n‘) # dic1 = {‘name‘:‘路飞‘,‘sex‘:‘male‘} # dic2 = {‘name‘:‘索隆‘,‘sex‘:‘male‘} # dic3 = {‘name‘:‘山治‘,‘sex‘:‘male‘} # my_dumps(dic1) # my_dumps(dic2) # my_dumps(dic3) # # with open(‘json_file‘,‘r‘,encoding=‘utf-8‘) as f: # for line in f: # dic = json.loads(line.strip()) # print(dic[‘name‘])
(4)json格式化
# import json # data = {‘username‘:[‘李华‘,‘二愣子‘],‘sex‘:‘male‘,‘age‘:16} # json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(‘,‘,‘:‘),ensure_ascii=False) # print(json_dic2)
2.pickle
import pickle # class Course(): # def __init__(self,name,price): # self.name = name # self.price = price # python = Course(‘python‘,29800) # linux = Course(‘linux‘,25800) # mysql = Course(‘mysql‘,18000) # ret = pickle.dumps(python) # print(ret) # p = pickle.loads(ret) # print(p.name,p.price) # with open(‘pickle_file‘,‘wb‘) as f: # pickle.dump(python,f) # with open(‘pickle_file‘,‘rb‘) as f: # course = pickle.load(f) # print(course.name)
pickle的dump,load 操作文件必须以+b模式打开。
在load的时候,如果这个要被load的内容所在的类不在内存中,会报错。
pickle支持多次dump和多次load(需要异常处理)
pickle的多次dump
# def my_dump(course): # with open(‘pickle‘,‘ab‘) as f: # pickle.dump(course,f) # my_dump(python) # my_dump(linux) # my_dump(mysql) # with open(‘pickle‘,‘rb‘) as f: # while True: # try: # content = pickle.load(f) # print(content.name) # except EOFError: # break
标签:c_str aaa sql 为什么 定义 模块 json 不能 序列
原文地址:https://www.cnblogs.com/eaoo/p/9580781.html