Python学习日记 Day14储存数据

今天是2020年2月23日,多云,8~13℃

目前很多程序都需要用户提供信息,并在程序关闭时仍为用户储存信息。JSON格式文件原本是为 JavaScript 开发的,但现在已经成为一种常见格式。json 模块能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。

一、数据储存与读取

使用 json 模块中的 dump 函数和 load 函数,可以实现数据的储存与读取。

1、dump函数

先写一个使用 dump 函数储存数据的程序。

import json
numbers = [1,1,2,3,5,8,13,21,34,55]
filename = "fbnq.json"
with open(filename,'w') as f_obj:
    json.dump(numbers,f_obj)

打开目录下的 fbnq.json,发现内容与程序内的numbers相同,包括方括号与逗号。

2、load函数

现在写一个使用 load 函数读取数据的程序。

import json
filename = "fbnq.json"
try:
    with open(filename) as f_obj:
        numbers = json.load(f_obj)
except FileNotFoundError:
    pass
else:
    print(numbers)			#Output:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    print(type(numbers))	#Output:<class 'list'>

存储在 .json 文件中的数据被成功读取,并且是以列表形式被读取。

二、应用try-except-else代码块

利用异常中学习的 try-except-else 代码块,可以在同一个程序中实现储存与读取。

import json
filename = "name.json"
try:
    with open(filename) as f_obj:
        name = json.load(f_obj)
except FileNotFoundError:
    name = input("What's your name!")
    with open(filename,'w') as f_obj:
        json.dump(name,f_obj)
    print("Nice to meet you, " + name + " ! We'll remember you!")
else:
    print("Welcome back, " + name + "!")
    while True:
        choice = input("Do you want to change your name?")
        if choice.lower() == 'yes':
            name = input("What's your name?")
            with open(filename,'w') as f_obj:
                json.dump(name,f_obj)
            print("You've successfully changed your name!")
            break
        elif choice.lower() == 'no':
            print("OK. Goodbye, " + name + "!")
            break
        else:
            print("Please Enter yes or no!")
'''
Test1:
What's your name!Alex
Nice to meet you, Alex ! We'll remember you!
Test2:
Welcome back, Alex!
Do you want to change your name?yes
What's your name?Micheal
You've successfully changed your name!
Test3:
Welcome back, Micheal!
Do you want to change your name?no
OK. Goodbye, Micheal!
'''

三、重构

上面的程序虽然能正确运行,但可以通过使用函数将各个部分拆分,能够将程序变得更加整洁。

import json

def save_new_name(filename):
    '''获取并储存新名字'''
    name = input("What's your name?")
    with open(filename,'w') as f_obj:
        json.dump(name,f_obj)
        print("Your name has been saved!")
    

def get_saved_name(filename):
    '''若文件存在则返回名字,否则返回False'''
    try:
        with open(filename) as f_obj:
            name = json.load(f_obj)
    except FileNotFoundError:
        return False
    else:
        return name


def ask_change_name(name,filename):
    '''输入yes修改名字,输入no退出告别,其它输入重复询问'''
    while True:
        choice = input("Do you want to change your name?")
        if choice.lower() == 'yes':
            save_new_name(filename)
            break
        elif choice.lower() == 'no':
            print("OK. Goodbye, " + name + "!")
            break
        else:
            print("Please Enter Yes or No!")


def greet_user():
    '''与用户交互'''
    filename = "name.json"
    name = get_saved_name(filename)
    if not name:
        save_new_name(filename)
    else:
        print("Welcome back, " + name + "!")
        ask_change_name(name,filename)


#主程序
greet_user()
发布了17 篇原创文章 · 获赞 1 · 访问量 486

猜你喜欢

转载自blog.csdn.net/weixin_44712386/article/details/104458104
今日推荐