9.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模块

  1. json模块一般用于保存python中的字典(最常用)或列表

  2. json模块只做过度后续用数据库

1. dumps& loads (在内存中使用)

(1)dumps

import 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 os

print(os.listdir(r'json文件夹目录')) #取出所有用户json文件列表

#输出:
['coco.json', 'jane.json', 'mike.json']
(5)判断用户是否已经注册
#

#方式1
import os

name_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) #把文件内容读成字典
posted @ 2025-08-31 11:23  bokebanla  阅读(7)  评论(0)    收藏  举报