文件的序列化和反序列化(pycharm)
序列化就是将Python中的对象即(列表(list) 元组() 字典(dict))转化成字符串,将其保存到文件中。(PS:因为列表等不能直接保存会报错),反序列化则相反。
㈠ 序列化的2种方式
❶dumps()
#(1)创建一个文件
fp = open('test.txt','w')
#(2)定义一个列表
name_list = ['BJT','LH']
#导人json模块珂该文件中
import json
# 将python对象变成json字符串
#我们在使用scrapy框架的时候 该框架会返向一个对象 我们要将对象写入到文件中 要使用json.dumps
names= json.dumps(name_list)
#将names写人到文件中
fp.write(names)
fp.close()
❷dump()
#创建文件
file=open('text.txt','w')
name_list=['bjt','lh']
#导入JSON模块
import json
json.dump(name_list,file)
file.close()
注意:如果输入中文字符
#创建文件
file = open('work.txt','w')
food_list = ['冒菜','麻辣烫','火锅']
#导入需要的json模块
import json
json.dump(food_list,file)
#关闭文件
file.close()
则会输出
["\u5192\u83dc", "\u9ebb\u8fa3\u70eb", "\u706b\u9505"]
因为此时有中文数据(或者其它 非ascii字符),写入的时候会被强行转义。而要关闭这个转义,也只要在使用 json.dump 的时候,指定一个关键词参数 就可以。
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
其中的 ensure_ascii 默认为 True,表示会将所有输入的非 ASCII 字符转义。只要改成 False 就可以。
json.dump(food_list,file,ensure_ascii=False)
输出
["冒菜", "麻辣烫", "火锅"]
㈡反序列化
反序列化就是将json对象转化成为字符串
❶loads用法
fp = open('work.txt','r')
content=fp.read()
import json
f=json.loads(content)
print(f)
❷load用法
fp = open('work.txt','r')
import json
print(json.load(fp))
两者输出都是
['冒菜', '麻辣烫', '火锅']
感谢看到这一行的你。