目录
- 9.1 json 模块
- 9.1.1 json模块
- 1. dumps& loads (在内存中使用)
- 2. load &dump (文件中转换使用 )
- 3. 总结
- 9.1.1 json模块
9.1 json 模块
#注册使用with open 保存为.txt文本,保存为字符串,取出也是字符串,很多行修改起来很麻烦
username1|pwd|extra|is_locked(0|1)
username2|pwd|extra|is_locked(0|1)
username3|pwd|extra|is_locked(0|1)#用with open打开文本,但是保存为.json文本
9.1.1 json模块
-
json模块一般用于保存python中的字典(最常用)或列表
-
json模块只做过度后续用数据库
1. dumps& loads (在内存中使用)
#(1)dumpsimport json
coco_info={'username':'coco','height':185,'weight':140,'pwd':123,'extra':15000,'is_locked':0}res=json.dumps(coco_info) #字典存进去的是字符串,也是json串(和字典很像,只不过它里面所有元素都是双引号)
print(res,type(res)) #输出
{"username": "coco", "height": 185, "weight": 140, "pwd": 123, "extra": 15000, "is_locked": 0} <class 'str'>
#(2)loads
res2=json.loads(res) #从文件取出来是字典
print(res2,type(res2)) #输出
{'username': 'coco', 'height': 185, 'weight': 140, 'pwd': 123, 'extra': 15000, 'is_locked': 0} <class 'dict'>
#(3)小练习
#之前写购物车系统,使用.txt文件保存用户信息,修改用户锁定状态非常困难,但是使用json修改起来很简单。coco_info['is_localed']=1
res=json.dumps(coco_info) #存入res2=json.loads(res) #读取
print(res2,type(res2)) #输出
{'username': 'coco', 'height': 185, 'weight': 140, 'pwd': 123, 'extra': 15000, 'is_locked': 0, 'is_localed': 1} <class 'dict'>
2. load &dump (文件中转换使用 )
#(1)dump(写入内容,文件)
coco_info={'username':'coco','height':185,'weight':140,'pwd':123,'extra':15000,'is_locked':0}with open('userinfo.json','w',encoding='gbk')as f_w:json.dump(coco_info,f_w)#(2)load(文件)
with open('userinfo.json','r',encoding='gbk')as f_r:data=json.load(f_r)
print(data)#输出
{'username': 'coco', 'height': 185, 'weight': 140, 'pwd': 123, 'extra': 15000, 'is_locked': 0}
#(3)小练习修改锁定状态
coco_info={'username':'coco','height':185,'weight':140,'pwd':123,'extra':15000,'is_locked':0}#存入信息
def save_file(filename,content):with open(filename,'w',encoding='gbk')as f_w:json.dump(content,f_w)#取出信息
with open('userinfo.json','r',encoding='gbk')as f_r:data=json.load(f_r)
print(data)
#输出
{'username': 'coco', 'height': 185, 'weight': 140, 'pwd': 123, 'extra': 15000, 'is_locked': 0}data['is_locaked']=1
save_file('userinfo.json',data)
- json有个弊端,想保存多条信息,要通过列表插入,那么就变得非常复杂。因此可以将'userinfo.json'改为f'{username}.json',一个用户一个json文件用的时候按用户名存取。
- 一个文件夹专门存放用户的json文件,搜寻有没有这个用户的json文件,使用OS模块
#(4)注册阶段和修改阶段
coco_info={'username':'coco','height':185,'weight':140,'pwd':123,'extra':15000,'is_locked':0}#注册阶段
def save_file(filename,content):with open(filename,'w',encoding='gbk')as f_w:json.dump(content,f_w)#修改阶段
username='coco'
with open(f'{username}.json','r',encoding='gbk')as f_r:data=json.load(f_r)
data['is_locaked']=0
username='coco'
save_file(f'{username}.json',data)
#os模块简单了解
#创建json文件夹保存所有用户的json文件
import osprint(os.listdir(r'json文件夹目录')) #取出所有用户json文件列表#输出:
['coco.json', 'jane.json', 'mike.json']
#(5)判断用户是否已经注册#方式1
import osname_list=os.listdir(r'json文件所在目录')
#此时name_list=['coco.json', 'jane.json', 'mike.json']#数据处理
name_list=map(lambda name:name.replace('.json',''),name_list)
#name_list=['coco', 'jane', 'mike']username='coco'
for user in name_list:if username==user:print('用户名已存在')break#方式2
username='coco.json' #手动添加'.json'字符后去作比对name_list=os.listdir(r'json文件所在目录')
for user in name_list:if username==user:print('用户名已存在')break
3. 总结
#dump & load 用的多
import json
json.dump(obj,fr) #把字典对象存入文件
json.load(fr) #把文件内容读成字典