使用模块json来存储保存用户数据。存储dump,加载load
1.使用json.dump()和json.load()
编写一个存储一组数字的程序
#存储数据
import json #导入模块
numbers=[1,2,3,4,5,6] #创建数字列表
filename='numbers.json'#生成文件,.json为拓展名
with open(filename,'w') as f_obj: #打开文件
json.dump(numbers,f_obj) #将数字列表numbers存到文件f_ojb(numbers.json)中
json.dump()有两个参数,一个是要存储的数据,一个是用于存储数据的文件对象
#将数字读到内存中
import json #导入模块
filename='numbers.json'#将数字列表以json格式存在文件,文件名filename
with open(filename) as f_obj:
numbers = json.load(f_obj)#数据加载出来
print(numbers)
[1, 2, 3, 4, 5, 6]
2.保存和读取用户生成的数据
import json
username=input("what is you name ?")
filename="username.json"
with open(filename,"w") as f_obj:
json.dump(username,f_obj) #存储
print("we will rememner you when you come back , "+username)
what is you name ?小小慧
we will rememner you when you come back , 小小慧
#对被存储的名字,发出问候
import json
filename="username.json" #程序使用了上面的文件内容
with open(filename) as f_obj:
username=json.load(f_obj)#加载
print("welcome back, "+username)
welcome back, 小小慧
#将以上两个程序合并 try—except
import json
filename="username_2.json"
#如果用户存储过名字就加载问候他否则就提示用户输入并存起来
try: #如果username_2.json文件存在,就加载问候他,
with open(filename) as f_obj:
uersname=json.load(f_obj)
except FileNotFoundError: #文件不存在,就提示输入
username=input("what is you name ?")
with open(filename,"w") as f_obj:
json.dump(username,f_obj) #存储
print("we will rememner you when you come back , "+username)
else:
print("welcome back, "+username)#文件存在
#重构为函数,各司其职,代码更加清晰易懂
import json
def get_sorted_username():
'''如果存储了用户就获取他'''
filename="username2.json"
try:
with open(filename) as f_object:
username2=json.load(f_object)
except FileNotFoundError:
return None
else:
return username2
def get_new_username():
username2=input("what is you name ?")
filename="username2.json"
with open(filename,"w") as f_object:
json.dump(username2,f_object) #存储
return username2
def greet_user():
'''问候用户并指出名字'''
username2=get_sorted_username()
if username2:
print("welcome back, "+username2)
else:
username2=get_new_username()
print("we will rememner you when you come back , "+username2)
greet_user()
第一次运行,会询问名字,第二次运行会问候,。要编写出清晰而且易于维护和拓展的代码,这种划分的工作必不可少。