栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

json数据和文件操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

json数据和文件操作

json数据和文件操作 登录注册系统 数据持久化:

因为需要下一次运行程序的时候可以使用上一次注册的账号,所以已经注册过的账号需要持久化
1)确定持久化对象:所有已经注册过的账号和对应密码
2)创建保存数据的文件
3)确定文件初始内容:一个用户占一行,每一行内容是’用户名;密码’
4)需要数据的时候从文件中获取数据
5)数据发生改变把最新的数据写入文件中
此处为练习:

def get_all_user_info():
    '''获取账号文件内容,并且将我呢见内容转换成字典'''
    f = open('files/user.txt', encoding='utf-8')
    all_user = {}
    for line in f.readlines():
        name, pw = line.strip().split(';')
        all_user[name] = pw
    f.close()
    return all_user


def register():
    print('~~~~~~正在注册~~~~~~')
    # 1.输入账号和密码
    username = input('请输入账号(不能包含分号):')
    pw = input('请输入密码(不能包含分号):')
    if ';' in username or ';' in pw:
        print('注册失败,账号或者密码不合法')
        return

    # 2.判断输入的账号是否已经注册过
    # 1)获取所有已经注册过的账号
    all_user = get_all_user_info()
    if username in all_user:
        print('注册失败,该账号已经存在!')
        return
    # 2)将输入的账号喝密码存储到文件中
    f = open('files/user.txt', 'a', encoding='utf-8')
    f.write(f'{username};{pw}n')
    print('注册成功!')


def login():
    print('~~~~~~~~~正在登录~~~~~~~~~~')
    # 1.输入账号和密码
    username = input('请输入账号:')
    pw = input('请输入密码:')
    # 2.判断登录是否成功
    # 1)账号是否已经注册
    all_user = get_all_user_info()
    if username not in all_user:
        print('登录失败!该账号没有注册!')
        return
    # 2)密码是否正确
    if all_user[username] != pw:
        print('登录失败!密码不对!')
    else:
        print('登录成功!')


def welcome():
    print('=======================')
    print('❀1.登录')
    print('❀2.注册')
    print('=======================')
    value = input('☺请选择:')
    if value == '1':
        login()
    elif value == '2':
        register()
    else:
        print('输入有误!')


if __name__ == '__main__':
    welcome()
json数据 1.什么是json

json和xml都是一种通用的数据格式,可以用于不同编程语言之间的数据交流。
json相对xml更小更轻,传输速度更快;xml相对于json更安全。

2.json数据

json数据格式的要求:一个json有且只有一个数据;唯一的数据必须是json支持的类型的数据。
json支持的类型:
1)数字:包括整数和小数,表示的时候是直接写:100,23.5, -3.14,3.14
2)字符串:用双引号(“”)引起来的数据:“abc”,“小明”
3)布尔:只有true和false
4)空值: null
5)数组:相当于python的列表:[数据1、数据2、…]
6)字典:相当于python的字典,但是键只能是字符串:{键1:值1,键2:值2,… }

3.python数据和json数据之间的相互转换

python中提供了json模块专门用来处理python中的json数据

import json

1)json转python
json -> python
数字 数字
字符串 字符串(双引号变单引号)
布尔 布尔(ture -> Ture;false -> False)
空值 空值(null -> None)
数组 列表
字典 字典
对应的函数:
json.loads(json格式字符串) - 将json格式字符串对应的json数据转换成Python数据
注意:json格式字符串指的是字符串内容是json数据的字符串
data.json文件中为:

{
  "name": "xiaoming",
  "age": 18,
  "gender": "男",
  "isMarried": false
}
content = open('data.json', encoding='utf-8').read()
result = json.loads(content)
print(result)  # {'name': 'xiaoming', 'age': 18, 'gender': '男', 'isMarried': False}
# result = json.loads("abc")  # 报错,字符串内容是abc,不是一个合法的json数据
result = json.loads('"abc"')    # "abc"  ->  'abc'
print(result, type(result))  # abc 
result = json.loads('100')     # 100 -> 100
print(result, type(result))   # 100 
result = json.loads('true')   # true -> True
print(result, type(result))   # True 
result = json.loads('[100, "小明", null, true, false]')
print(result, type(result))   # [100, '小明', None, True, False] 

2)python转json
python -> json
int、float 数字
str 字符串(单引号会变成双引号)
bool True -> true;False -> false
None null
列表、元组 数组
字典 字典
对应的函数:
json.dumps(Python数据) - 将指定Python数据转换成对应的json格式字符串

json.dumps(100)        # '100'
json.dumps('abc')      # '"abc"'
json.dumps(True)      # 'true'
result = json.dumps({'a': 10, 20: 30, 'name': 'xiaoming', 'isMarred': True})
print(result, type(result))    # {"a": 10, "20": 30, "name": "xiaoming", "isMarred": true} 
json实际应用

示例:学生管理系统添加学生
=添加学生==
请输入学生姓名:
请输入学生年龄:
请输入学生手机号:
请输入学生专业:
请输入学生籍贯:
添加成功!
❤1.继续
❤2.退出
请选择:
数据存储思路
1.已经添加过的所有学生需要持久化
2.文件内容格式:
[{“name”: “小明”, “age”: 18, “major”:“电子信息”, “address”: “成都”}]

import json


def add_student():
    while True:
        # 1. 输入学生信息
        print('=========添加学生==========')
        name = input('请输入学生姓名:')
        age = input('请输入学生的年龄:')
        tel = input('请输入学生的电话:')
        major = input('请输入学生的专业:')
        address = input('请输入学生的籍贯:')

        # 2. 保存学生信息
        content = open('files/student.txt', encoding='utf-8').read()        # '[]'
        all_students = json.loads(content)          # type: list

        # [{}]
        all_students.append({'name': name, 'age': age, 'tel': tel, 'major': major, 'address': address})
        open('files/student.txt', 'w', encoding='utf-8').write(json.dumps(all_students))

        print('添加成功!')
        # 3. 提示继续或者退出
        print('❤️1. 继续')
        print('❤️2. 退出')
        value = input('请选择:')
        if value == '1':
            pass
        else:
            # 打印已经添加过的所有的学生信息
            print(all_students)
            break


# if __name__ == '__main__':
#     # add_student()
#
#     # 统计电子专业学生的人数:
#     all_student = json.loads(open('files/student.txt', encoding='utf-8').read())
#     count = 0
#     for x in all_student:
#         if x['major'] == '电子':
#             count += 1
#     print(count)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号