前言
文件只能存储字符串、二进制,若把内存的数据对象存到硬盘 从硬盘里读取数据,里面不止是字符串的类型,因此用到了json and pickle 序列化
json序列化
作用:用于不同语言进行的数据交互,json默认只能处理简单化的数据类型:字典、列表、字符串。为何只能处理简单的数据类型?因为java里的类和pyhton的类完全不一样,定义、特性等
文件只能存储字符串、二进制,例如将数据字典的数据类型写入文件,报错
按之前学过的知识对文件序列化
1 info = { 2 "name":"Mike", 3 "age":16 4 } 5 f = open("json1","w",encoding = "utf-8") 6 f.write(info) 7 f.close() 8 结果: 9 Traceback (most recent call last): 10 File "E:/python_3.5/second/json模块/json1.py", line 6, in <module> 11 f.write(info) 12 TypeError: write() argument must be str, not dict
数据类型为字符串已存入文件
1 info = { 2 "name":"Mike", 3 "age":16 4 } 5 f = open("json1","w",encoding = "utf-8") 6 f.write(str(info)) 7 f.close() 8 写入的json1文件 9 {'age': 16, 'name': 'Mike'}
用json.dumps()序列化
1 import json 2 info = { 3 "name":"Mike", 4 "age":16 5 } 6 f = open("json1","w",encoding = "utf-8") 7 #print(json.dumps(info)) #结果{"age": 16, "name": "Mike"} 8 f.write(json.dumps(info)) 9 10 写入文件 11 {"age": 16, "name": "Mike"}
json.dump()序列化
不用写f.write() 将文件句柄传入
1 import json 2 info = { 3 "name":"Mike", 4 "age":16, 5 #"fun":sayhi 6 } 7 8 f = open("json1","w",encoding = "utf-8”) 9 json.dump(info,f) 10 11 写入文件: 12 {"age": 16, "name": "Mike"}
json.loads()反序列化
按之前学过的知识对文件反序列化
1 f = open("json1","r",encoding = "utf-8") 2 data = eval(f.read()) 3 print(data) 4 print(data["age"]) 5 6 结果: 7 {'age': 16, 'name': 'Mike'} 8 16
用json反序列化读取文件
1 import json 2 f = open("json1","r",encoding = "utf-8") 3 data = json.loads(f.read()) 4 print(data["age"]) 5 结果 6 16
json.load()反序列化
1 import json 2 f = open("json1","r") 3 # data = pickle.loads(f.read()) 4 print(json.load(f)) 5 6 结果: 7 {'age': 16, 'name': 'Mike'}
pickle.dumps() 序列化
pickle只有在Python本语言里使用,java不认识pickle数据类型,只认识json数据类型
pickle可以序列化python里的所有数据类型
1 import pickle 2 def sayhi(): 3 print("hello") 4 info = { 5 "name":"Mike", 6 "age":16, 7 "fun":sayhi 8 } 9 10 f = open("json1","wb") 11 f.write(pickle.dumps(info))
写入的文件
注意:
pickle.loads() 反序列化
1 import pickle 2 def sayhi(): 3 print("hello") #为何这里要再写一遍,在序列化时程序结束函数的内存地址已经被释放了 已找不到 4 5 f = open("json1","rb") 6 data = pickle.loads(f.read()) 7 print(data["age"]) 8 print(data) 9 结果: 10 16 11 {'name': 'Mike', 'fun': <function sayhi at 0x005D2FA8>, 'age': 16}