Python json模块和pickle模块

json模块

# 序列化:将数据从内存持久化保存到硬盘(不一定是硬盘)的过程
# 反序列化:将数据从硬盘加载到内存的过程

# write 只能写入二进制或字符串
# 字典、列表、元组和数字等都不能直接写入到文件里

# 将数据转换成为字符串:repr/str 使用json模块
# json的本质就是字符串,区别在于json里要用双引号表示字符串
# 将数据转换成为二进制:使用pickle模块
import json

file = open('name.json', 'w', encoding='utf8')
name = ['zhangsan', 'lisi', 'wangwu', 'maliu']
x = json.dumps(name)  # dumps 的作用是将数据转换成为字符串
print(x)# ["zhangsan", "lisi", "wangwu", "maliu"]
file.write(x)
file.close()

# json里有两个将数据持久化的方法
# dumps:将数据转换成为json字符串,不会将数据保存到文件里
# dump:将数据转换成json字符串的同时写入到指定文件


# json反序列化也有两个方法
# loads:将json字符串加载成为Python里的数据
x = '{"name":"zhangsan","age":18}'  # 符合json规则的字符串
y = "100"
p = json.loads(x)
print(p, type(p))# {'name': 'zhangsan', 'age': 18} <class 'dict'>
print(p['name'])# zhangsan

pickle模块

# Python 里存入的数据只支持存入 字符串 和 二进制
# json:将python里的数据(str/list/tuple/dict/int/float/bool/None)等转换成为对应的json
# pickle:将python的任意对象转换成为二进制

import pickle

# 序列化: dumps:将python数据转换成为二进制
#          dump:将python数据转换成为二进制,并保存到指定的文件
# 反序列化:loads:将二进制加载成为python数据
#          load:读取文件,并将文件里的内容加载成为python数据
name = ['zhangsan', 'shuaige', 'xiaohong', 'xiaohua', 'xiaolan']

pickle.dump(name,open('names.txt','wb'))
print(pickle.load(open('names.txt','rb')))
# ['zhangsan', 'shuaige', 'xiaohong', 'xiaohua', 'xiaolan']

class Dog(object):
    def __init__(self,name,color):
        self.name=name
        self.color=color
dog =Dog('小黑','黑色')
# 保存到文件里
pickle.dump(dog,open('dog.txt','wb'))
# 从文件里加载出来
d=pickle.load(open('dog.txt', 'rb'))
print(d.name,d.color)# 小黑 黑色

两个模块的方法都差不多,可以自行演示去看一下不同

猜你喜欢

转载自blog.csdn.net/hmh4640219/article/details/113529637