python加密数据文件——文件操作——文件的读和写——pickle自带模块/json自带模块——序列化字符串/反序列化字符串

目录

1.pickle

        1.简介

        2.使用方法

        3.实例

2.json

        1.简介

        2.使用方法

_____________________________________________________________________________

1.pickle

1.简介

模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化。 "pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 "unpickling" 是相反的操作,会将(来自一个 binary file 或者 bytes-like object 的)字节流转化回一个对象层次结构。 pickling(和 unpickling)也被称为“序列化”, “编组” 或者 “平面化”。而为了避免混乱,此处采用术语 “封存 (pickling)” 和 “解封 (unpickling)”。

2.使用方法

pickle模块常用方法
pickle.dumps(obj)将obj序列化重要程度:*****
pickle.loads(obj)反序列化obj*****
pickle.dump(obj,file)将obj序列化后写入file中****
pickle.load(file_obj)将文件中的序列化对象反序列化****

3.实例

import pickle
#第一次运行请去掉下面一段代码的注释
'''
users_db = open("users.txt","wb")
users_list = [["admin","admin",1],["tiannan","123456",1],["jide","123",0]]
#["admin","admin",1] -> [<用户名>,<密码>,<锁(是/否)>]
pickle.dump(users_list,users_db)
users_db.close()
'''

users_db=open("users.txt","rb")
users_list=pickle.load(users_db)
users_db.close()
#print(users_list)

#用户登录机会
users_pass = {}
for i in users_list:
    users_name = i[0]
    users_pass[users_name]=3
#users_pass = {"admin":3,"tiannan":3,"jide":3} -> {<用户名>:<可尝试登录次数>}
#print(users_pass)

def ha_user(user_name):
    no_user = "yes"
    for j, users_msg in enumerate(users_list):
        #print(i,users_msg)
        #判断用户名是否存在
        if user_name in users_msg:
            no_user = j
            break
    return no_user

def write_db():
    users_db = open("users.txt","wb")
    pickle.dump(users_list,users_db)
    users_db.close()
    
def change_password():
    password1 = input("请输入新密码:")
    password2 = input("请再次输入新密码:")
    if password1 == password2:
        users_list[index][1] = password1
        write_db()
        print("密码修改成功!")
    else:
        print("您输入的密码不一致!")
        
while True:
    sel = int(input("选择:<1>登录 <2>注册\n"))
    if sel == 1:
        name = input("请输入用户名:")
        password = input("请输入密码:")

        index = ha_user(name)
        if index == "yes":
            print("用户名不存在!")
        else:
            users_info = users_list[index]
            #判断用户是否处于锁定状态
            if users_info[-1] == 0:
                print("%s用户已被锁,请联系管理员解锁账户!" % users_info[0])
            else:
                if password == users_info[1]:
                    #重置账户锁定验证次数
                    users_pass[name]=3
                    print("登录成功!")
                    while name == "admin":
                        sel2 = int(input("请选择:<1>修改密码 <2>重置用户 <3>查看用户 <4>退出\n"))
                        if sel2 == 1:
                            change_password()
                        elif sel2 == 2:
                            name2 = input("请输入需要重置的用户名:")
                            index3 = ha_user(name2)
                            if index3 == "yes":
                                print("用户名不存在!")
                            else:
                                users_list[index3][1]= "123456"
                                users_list[index3][-1]= 1
                                write_db()
                                print("%s用户重置成功!" % name2)
                        elif sel2 == 3:
                            name2 = input("请输入查找的用户名:")
                            index2 = ha_user(name2)
                            if index2 != "yes":
                                print(users_list[index2])
                            else:
                                print("该用户不存在!")
                        elif sel2 == 4:
                            break   
                    while name != "admin":
                        sel3 = int(input("请选择:<1>修改密码 <2>退出\n"))
                        if sel3 == 1:
                            change_password()
                        elif sel3 == 2:
                            break
                else:
                    users_pass[name]-=1
                    if users_pass[name] > 0:
                        print("密码错误,你还有%d次机会,请重新登录!" % users_pass[name])
                    else:
                        users_list[index][-1]=0
                        write_db()
                        print("%s用户多次登录失败,已被锁,请联系管理员解锁账户!" % users_info[0])
    elif sel == 2:
        name = input("请输入用户名:")
        password = input("请输入密码:")

        result = ha_user(name)
        if result == "yes":
            user_list = [name,password,1]
            users_list.append(user_list)
            write_db()
            print("注册成功!")
        else:
            print("该用户名已被注册!")

2.json

1.简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写。

前端和后端进行数据交互,其实就是JS和Python进行数据交互

2.使用方法

常用的json方法
方法描述重要程度
json.dumps(obj)将obj序列化*****
json.loads(obj)反序列化obj*****
json.dump(obj,file)将obj序列化后写入file中****
json.load(file_obj)将文件中的序列化对象反序列化****
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值