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