大部分程序要求使用者输入一些信息,程序都把这些信息存储在列表或者字典等数据结构中。当程序关闭时,要保存这些信息,最简单的方式是使用模块json来存储数据。

模块json能将简单的 Python 数据结构转储到文件中,程序再次运行时加载文件中的数据。也可以将数据分享到其他程序。json格式也并非 Python 专用,也可以同步使用其他编程语言的程序使用。

json.dump()

json.dump() 函数用来存储数据,接受两个实参:要存储的数据以及可用于存储数据的文件对象。

import json   # 使用json模块

numbers = [1, 5, 1, 0, 3, 5, 4]  # 数字列表

filename = 'number.json'         # 需要存储的文件
with open(filename, 'w') as f_obj:     # 写入文件
    json.dump(numbers, f_obj)          # 将数字列表写入到文件中

json.load()

json.load() 函数用来读取json数据

import json   # 使用json模块

filename = 'number.json'         # 存储数据的文件
with open(filename) as f_obj:     # 读取文件
    num = json.load(f_obj)          # 使用load读取文件
print(num)

保存用户输入信息

import json

user_message = input("请输入您的名字:")

filename = 'users_message.json'

with open(filename, 'w') as f_user:
    w_user = json.dump(user_message, f_user)
print(user_message + ", 你好, 当你下次回来时,我会记得你的名字!")

读取用户信息

import json

filename = 'users_message.json'

with open(filename) as f_user:
    r_user = json.load(f_user)
print("欢迎回来," + r_user + "!")

合并以上两个操作

import json

filename = 'usernames.json'

try:
    with open(filename) as user:     # 尝试读取文件
        r_user = json.load(user)
except FileNotFoundError:            # 如果文件不存在,由用户输入信息
    username = input("请输入您的名字:")
    with open(filename, 'w') as user:
        json.dump(username, user)
        print(username + ", 你好, 当你下次回来时,我会记得你的名字!")
else:
    print("欢迎回来," + r_user + "!")

代码重构

代码需要重构的原因是因为要让代码更清晰,更易于理解和扩展。

其实也就是使用函数让代码可复用。

import json

filename = 'usernames.json'

def read_user():
    """如果该文件存在就读取内容"""
    try:
        with open(filename) as user:
            r_user = json.load(user)
    except FileNotFoundError:
        return None
    else:
        return r_user

def input_user():
    in_user = input("请输入您的名字:")
    with open(filename, 'w') as w_user:
        json.dump(in_user, w_user)
    return in_user

def greet_user():  
    username = read_user()
    if username:
        print("欢迎回来," + username + "!")
    else:
        user = input_user()
        print(user + ", 你好, 当你下次回来时,我会记得你的名字!")

greet_user()

练习

import json

filename = 'f_numbers.json'

def read_num():
    try:
        with open(filename) as r_num:
            fr_num = json.load(r_num)
    except FileNotFoundError:
        return None
    else:
        x = input("请问您喜欢的数字是否是 " + fr_num + ",请输入Y/N:")
        if x == "Y":
            return fr_num
        else:
            write_num()

def write_num():
    wri_num = input("请输入您最喜欢的数字:")
    with open(filename, 'w') as w_num:
        json.dump(wri_num, w_num)
    print("I know your favorite number! It's " + wri_num)

def main():
    f_num = read_num()
    if f_num:
        print("I know your favorite number! It's " + f_num)

main()

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0