通过文件操作,可将字符串写入到一个本地文件,但是无法将一个对象,如字典,列表,元组直接写入到一个文件里,这是就需要将这个对象进行序列化,然后写入文件。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。
序列化: 将对象转换为字节序列。
反序列化:将字节序列转换为对象。
JSON模块
Python中JSON模块可用来实现数据的序列化和反序列化。
JSON:Javascript Object Notation ,一种轻量级的数据交换标准。JSON的本质是字符串。
使用JSON实现序列化
JSON提供了dump和dumps方法,将一个对象序列化。把对象转换为字符串,方法本身不具备将数据写入到文件的功能。
dumps( ) 方法测试
测试代码:
import json
names = [‘Jack’, ‘Dennis’, ‘Ritchie’, ‘Mike’, ‘Tony’]
# dumps 传入一个对象,转换为一个JSON字符串
result = json.dumps(names)
print(result)
print(type(result)) #
with open(‘json.txt’, ‘w’) as f:
f.write(result)
dump() 方法测试
将对象转换为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件
# dump
fp =open(‘json2.txt’, ‘w’)
json.dump(names, fp)
fp.close()
# 或者
with open(‘json3.txt’, ‘w’) as f:
json.dump(names, f)
实现了对象序列化的同时写入文件。
创建文件效果如下:
json2.txt和json3.txt写入了同样的内容。
JSON实现反序列化
将JSON的字符串变成一个Python对象
# 反序列化 loads( )方法
with open(‘json.txt’, ‘r’) as f:
content = f.read()
print(content)
print(type(content))
输出:
[“Jack”, “Dennis”, “Ritchie”, “Mike”, “Tony”]
可以看到,读取输出的是字符串类型,并不是列表。
with open(‘json.txt’, ‘r’) as f:
content = f.read()
result = json.loads(content)
print(type(result))
输出:
可以看出,使用loads( )方法后将字符串转变为列表对象了。
# load( )方法
测试代码:
with open(‘json.txt’) as f:
result = json.load(f)
print(result)
print(type(result))
输出:
[‘Jack’, ‘Dennis’, ‘Ritchie’, ‘Mike’, ‘Tony’]
直接转换为列表对象了。