zoukankan      html  css  js  c++  java
  • json&pickle数据序列化模块

    用于序列化的模块

    • json,通用的序列化方式,序列化成为str类型,支持所有语言识别,序列化的数据具有局限性。
    • pickle,python的所有数据类型都可以被序列化,序列化为bites格式,只适用于python之间的数据交互。

    json和pickle都支持四个功能:load,loads,dump,dumps.

    可以根据下面的代码来看四个功能到底如何实现:

    # Author:Zhang Zhao
    #json序列化实现
    import json
    data = {'name':'zhangzhao','age':18}
    with open('zz.text','w') as f:
        f.write(json.dumps(data))# 等价于json.dump(data,f)
        #将data内的数据序列化成为str类型,然后写到zz.text里面
    # Author:Zhang Zhao
    #json反序列化实现
    import json
    with open('zz.text','r') as f:
        data = json.loads(f.read())# 等价于json.load(f)
        #将zz.text里json序列化的数据转换成为原来的字典数据类型。
    
    print(data,type(data))
    
    {'name': 'zhangzhao', 'age': 18} <class 'dict'>

     下面是利用json序列化实现简单的用户注册,实现用户登录,并且当输入次数大于三次时便会锁定。(本来输入密码想用getpass,但不知为何pycharm里执行getpass有点问题。。。)

    可以参考Alex的博客学习python数据类型。

    # Author:Zhang Zhao
    import getpass, json
    
    with open('data.text', 'r') as f:
        # data = eval(json.load(f))
        data = json.loads(f.read())
    choice = input('注册还是登录:').strip()
    count = 0
    while True:
        if choice == '注册':
            username = input('请输入用户名:')
            if username.strip() in data:
                print('用户名已存在,请换一个')
            else:
                pwd = input('请输入密码:')
                data[username] = pwd
                print('注册成功')
                with open('data.text', 'w') as f:
                    f.write(json.dumps(data))
                break
        elif choice == '登录':
            username = input('请输入用户名:')
            pwd = input('请输入密码:')
            if pwd == data.get(username):
                print('验证成功')
                break
            else:
                print('用户名或密码错误')
                count += 1
                if count > 3:
                    print('输入错误次数太多,滚')
                    break
        else:
            break
    View Code
  • 相关阅读:
    实验0 了解和熟悉操作系统一、目的和要求
    读后感
    有穷自动机自动转化
    文法分析
    词法分析随笔
    git操作笔记
    面试题汇总
    MYSQL数据库设计
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    invalid comparison:java.util.Date and java.lang.String
  • 原文地址:https://www.cnblogs.com/zz1314/p/10323592.html
Copyright © 2011-2022 走看看