用户关闭程序时,你几乎总是要保存他们提供的信息;一种简单的方式是使用模块json 来存储数据。模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。
1、使用json.dump()和json.load()
函数json.dump() 接受两个实参:要存储的数据以及可用于存储数据的文件对象,使用json.load() 将这个列表读取到内存。
import json # 使用json.dump()把数据存储到文件 numbers = [2, 3, 5, 7, 11, 13] filename = ‘numbers.json‘ with open(filename, ‘w‘) as f_obj: json.dump(numbers, f_obj) # 使用json.load() 将这个列表读取到内存中 with open(filename) as f_obj: numbers = json.load(f_obj) print(numbers) # [2, 3, 5, 7, 11, 13]
2、保存和读取用户生成的数据
对于用户生成的数据,使用json 保存它们大有裨益,因为如果不以某种方式进行存储,等程序停止运行时用户的信息将丢失。
import json # 如果以前存储了用户名,就加载它 # 否则,就提示用户输入用户名并存储它 filename = ‘username.json‘ try: with open(filename) as f_obj: username = json.load(f_obj) except FileNotFoundError: # 如果文件不存在,那么 username = input("What is your name? ") with open(filename, ‘w‘) as f_obj: json.dump(username, f_obj) print("We‘ll remember you when you come back, " + username + "!") else: # 如果文件存在,那么 print("Welcome back, " + username + "!")
3、使用自定义函数来完成上面
import json def greet_user(): """问候用户,并指出其名字""" filename = ‘username.json‘ try: with open(filename) as f_obj: username = json.load(f_obj) except FileNotFoundError: username = input("What is your name? ") with open(filename, ‘w‘) as f_obj: json.dump(username, f_obj) print("We‘ll remember you when you come back, " + username + "!") else: print("Welcome back, " + username + "!") greet_user()
4、对上面的函数进一步重构,重构让代码更清晰、更易于理解、更容易扩展。
import json def get_stored_username(): """如果存储了用户名,就获取它""" filename = ‘username.json‘ try: with open(filename) as f_obj: username = json.load(f_obj) except FileNotFoundError: return None else: return username def get_new_username(): """提示用户输入用户名""" username = input("What is your name? ") filename = ‘username.json‘ with open(filename, ‘w‘) as f_obj: json.dump(username, f_obj) return username def greet_user(): """问候用户,并指出其名字""" username = get_stored_username() if username: print("Welcome back, " + username + "!") else: username = get_new_username() print("We‘ll remember you when you come back, " + username + "!") greet_user()