1.4 存储数据 模块json
程序用户提供的信息存储在列表和字典等数据结构中,用户关闭是,我们需要保存信息
模块json存储数据
模块json的作用:将简单python数据结构存储到文件中,在程序再次运行时加载该文件的
数据;还可以与程序之间分享数据
特点:json数据格式在其他编程语言也有,所以易于信息分享
json(JavaScript Object Notation)格式源头: javaScript开发的
1.4.1 使用 json.dump()和 json.load()
json.dump(): 存储数据
json.load(): 加载数据
1、存储数据 json.dump()
import json
numbers = [2,3,5,7,9,11,13]
filename = 'number.json'
with open(filename,'w') as f_obj:
json.dump(numbers, f_obj)
结果:
[2, 3, 5, 7, 9, 11, 13] # 该结果从文件中可以看到,存储的确实是列表
2、加载数据 json.load()
import json
filename = 'number.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
结果:
[2, 3, 5, 7, 9, 11, 13]
总结: 利用模块json的json.dump()方法和json.load()方法可以简单在程序之间共享数据
1.4.2 保存和读取用户生成的数据
import json
username = input("What is your name? ")
filename = 'username.json'
with open(filename,'w') as f_obj:
json.dump(username, f_obj)
print("We'll remember you when you come back, " + username + "!")
结果:
What is your name? liming
We'll remember you when you come back, liming!片
向其名字被存储的用户发出问候
import json
filename = "username.json"
with open(filename) as f_obj:
username = json.load(f_obj)
print("Welcome back, " + username + "!")
结果:
Welcome back, liming!
合并写读程序
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 + "!")
结果:
Welcome back, liming!
1.4.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()
结果:
greet_user()
Welcome back, liming!
重构greet_user(),即将函数的功能细化为多个函数完成
import json
def get_sorted_username():
"""如果存储了用户名,就获取它"""
filename = 'username.json'
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
return None
else:
return username
def greet_user():
"""问候用户,并指出其名字"""
username = get_sorted_username()
if username:
print("Welcome back, " + username + "!")
else:
username = input("What is your name? ")
filename = 'username.json'
with open(file_name,'w') as f_obj:
json.dump(filename, f_obj)
print("We'll remember you when you come back, " + username + "!")
greet_user()
结果:
greet_user()
Welcome back, liming!
进一步重构
def get_sorted_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_sorted_username()
if username:
print("Welcome back, " + username + "!")
else:
username = get_new_username()
print("We'll remember you when you come back, " + username + "!")
greet_user()
结果:
Welcome back, liming!
重构(拆分功能块)的好处,易于写出清晰和便于维护、扩展的代码
总结:
模块json: 1 方法json.dump(w_name,f_obj) 作用将数据写入文件中,w_name: 数据存储的变量,f_obj:指向文件对象的变量名
2 方法json.load(f_obj) 作用将数据从文件中导出到变量中
f_obj: 指向文件对象的变量名
重构:作用拆分函数功能块,将其用多个函数来完成,方便查看、维护、扩展
try-except-else模块在重构中作用很大,需要多次练习才能知道里面的妙处。