《Python编程:从入门到实践》学习打卡15-存储数据

存储数据

一种程序间共享数据的简单方式—JSON格式

为解决用户关闭程序时将数据存储在列表和字典等数据结构中,使用模块json储存数据

json模块能将简单的python数据结构转储到文件中,并且不仅仅局限于python,还可以于=与其他编程语言共享

json.dump()和json.load()

前者存储数字,后者将数字读取到内存中

json.dump(存储的数据,可用于存储数据的文件对象)

import json
number = [2,3,4,5,7]
filename = 'number.json' # 指出文件格式为.json
with open(filename,'w') as f_obj:
    json.dump(number,f_obj) # 将数据存储到number.json中

json.load(文件对象)

import json
number = [2,3,4,5,7]
filename = 'number,json'
with open(filename,'w') as f_obj:
    json.dump(number,f_obj)
with open(filename) as f_obj1: 
    numbers = json.load(f_obj1) # 读取文件,赋给变量numbers

读取用户信息,如果不存在则创建一个新的文件并将新用户姓名加进去

import json
filename = 'username.json' # 每个用户对应一个.json文件夹
try:
    with open(filename) as f_obj: # 尝试是否用户存在,存在则打印欢迎
        username = json.load(f_obj)
except FileNotFoundError:
    username = inpit('what is your name?') # 不存在则创建一个新的.json文件
    with open(filename.'w') as f_obj1:
        json.dump(username,f_obj1)
else:
    print('hello ' + username + '!')

可将上代码放进一个函数greet_user()中

def greet_user():
    --snip-- # 上文代码全部放进这里面
greet_user()

重构

重构的含义是将一个函数分成完成具体工作的若干个函数,使得函数代码更加清晰易理解

import json
def get_stored_username(): 
    """储存用户名的函数,有则获取,无则返回空值"""
    filename = 'username.json'
    try:
        with open(filename) as f_obj1:
            username = json.load(f_obj1)
    except FileNotFoundError:
        return None
    else:
        return username

def greet_user():
    """问候用户,打印欢迎词"""
    username = get_stored_username()
    if username:
        print('hello ' + username + '!') # 有值则打印欢迎语
    else:
        username = input('whst is your name?') # 无值则创建新的文件
        filename = 'username.json'
        with open(filename,'w') as f_obj2:
            json.dump(username,f_obj2)
            print('we will remember you ' + username + '!')
greet_user()
import json
def get_stored_username(): 
    """储存用户名的函数,有则获取,无则返回空值"""
    filename = 'username.json'
    try:
        with open(filename) as f_obj1:
            username = json.load(f_obj1)
    except FileNotFoundError:
        return None
    else:
        return username
    
def new_user():
    """新建用户文件"""
    username = input('what is your name?')
    filename = 'username.json'
    with open(filename,'w') as f_obj2:
        json.dump(username,f_obj2)
    return username

def greet_user():
    """问候用户,打印欢迎词"""
    username = get_stored_username()
    if username:
        print('hello ' + username + '!') 
    else:
        username = new_user()
        print('we will remember you ' + username + '!')
greet_user()

课后习题

10-11喜欢的数字

import json

try:
    number = int(input('what is your favorite number?'))
except ValueError:
    print('A number,not string')
else:
    filename = 'number.json'
    with open(filename,'w') as f_obj1:
        json.dump(number,f_obj1)
    with open(filename) as f_obj2:
        f_num = json.load(f_obj2)
        print('I know your favorite number! it\'s ' + str(f_num))

10-12记住喜欢的数字

filename = 'numbers.json'
try:
    with open(filename) as f_obj:
        num = json.load(f_obj)
        print(num)
except FileNotFoundError:
    number = input('what is your favorite number?')
    filename = 'numbers.json'
    with open(filename,'w') as f_obj2:
        num = json.dump(number,f_obj2)
    with open(filename) as f_obj3:
        nums = json.load(f_obj3)
    print('your favorite number is ' + nums)

10-13验证用户

import json
def get_stored_username():
    """储存用户名的函数,有则获取,无则返回空值"""
    filename = 'username.json'
    try:
        with open(filename) as f_obj1:
            username = json.load(f_obj1)
    except FileNotFoundError:
        return None
    else:
        return username


def new_user():
    """新建用户文件"""
    username = input('what is your name?')
    filename = 'username.json'
    with open(filename, 'w') as f_obj2:
        json.dump(username, f_obj2)
    return username


def greet_user():
    """询问用户"""
    username = get_stored_username()
    if username:
        judge = input('Is the name ' + username + ' correct?(y/n)')
        if judge == 'y':
            print('hello ' + username + '!')
        else:
            print('input name to creat a new count!')
            username = new_user()
            print('we will remember you ' + username + '!')
    else:
        username = new_user()
        print('we will remember you ' + username + '!')
greet_user()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值