存储数据
一种程序间共享数据的简单方式—JSON格式
为解决用户关闭程序时将数据存储在列表和字典等数据结构中,使用模块json储存数据
json模块能将简单的python数据结构转储到文件中,并且不仅仅局限于python,还可以于=与其他编程语言共享
json.dump()和json.load()
前者存储数字,后者将数字读取到内存中
json.dump(存储的数据,可用于存储数据的文件对象)
import json
number = [2,3,4,5,7]
filename = 'number.json' # 指出文件格式为.json
with open(filename,'w') as f_obj:
json.dump(number,f_obj) # 将数据存储到number.json中
json.load(文件对象)
import json
number = [2,3,4,5,7]
filename = 'number,json'
with open(filename,'w') as f_obj:
json.dump(number,f_obj)
with open(filename) as f_obj1:
numbers = json.load(f_obj1) # 读取文件,赋给变量numbers
读取用户信息,如果不存在则创建一个新的文件并将新用户姓名加进去
import json
filename = 'username.json' # 每个用户对应一个.json文件夹
try:
with open(filename) as f_obj: # 尝试是否用户存在,存在则打印欢迎
username = json.load(f_obj)
except FileNotFoundError:
username = inpit('what is your name?') # 不存在则创建一个新的.json文件
with open(filename.'w') as f_obj1:
json.dump(username,f_obj1)
else:
print('hello ' + username + '!')
可将上代码放进一个函数greet_user()中
def greet_user():
--snip-- # 上文代码全部放进这里面
greet_user()
重构
重构的含义是将一个函数分成完成具体工作的若干个函数,使得函数代码更加清晰易理解
import json
def get_stored_username():
"""储存用户名的函数,有则获取,无则返回空值"""
filename = 'username.json'
try:
with open(filename) as f_obj1:
username = json.load(f_obj1)
except FileNotFoundError:
return None
else:
return username
def greet_user():
"""问候用户,打印欢迎词"""
username = get_stored_username()
if username:
print('hello ' + username + '!') # 有值则打印欢迎语
else:
username = input('whst is your name?') # 无值则创建新的文件
filename = 'username.json'
with open(filename,'w') as f_obj2:
json.dump(username,f_obj2)
print('we will remember you ' + username + '!')
greet_user()
import json
def get_stored_username():
"""储存用户名的函数,有则获取,无则返回空值"""
filename = 'username.json'
try:
with open(filename) as f_obj1:
username = json.load(f_obj1)
except FileNotFoundError:
return None
else:
return username
def new_user():
"""新建用户文件"""
username = input('what is your name?')
filename = 'username.json'
with open(filename,'w') as f_obj2:
json.dump(username,f_obj2)
return username
def greet_user():
"""问候用户,打印欢迎词"""
username = get_stored_username()
if username:
print('hello ' + username + '!')
else:
username = new_user()
print('we will remember you ' + username + '!')
greet_user()
课后习题
10-11喜欢的数字
import json
try:
number = int(input('what is your favorite number?'))
except ValueError:
print('A number,not string')
else:
filename = 'number.json'
with open(filename,'w') as f_obj1:
json.dump(number,f_obj1)
with open(filename) as f_obj2:
f_num = json.load(f_obj2)
print('I know your favorite number! it\'s ' + str(f_num))
10-12记住喜欢的数字
filename = 'numbers.json'
try:
with open(filename) as f_obj:
num = json.load(f_obj)
print(num)
except FileNotFoundError:
number = input('what is your favorite number?')
filename = 'numbers.json'
with open(filename,'w') as f_obj2:
num = json.dump(number,f_obj2)
with open(filename) as f_obj3:
nums = json.load(f_obj3)
print('your favorite number is ' + nums)
10-13验证用户
import json
def get_stored_username():
"""储存用户名的函数,有则获取,无则返回空值"""
filename = 'username.json'
try:
with open(filename) as f_obj1:
username = json.load(f_obj1)
except FileNotFoundError:
return None
else:
return username
def new_user():
"""新建用户文件"""
username = input('what is your name?')
filename = 'username.json'
with open(filename, 'w') as f_obj2:
json.dump(username, f_obj2)
return username
def greet_user():
"""询问用户"""
username = get_stored_username()
if username:
judge = input('Is the name ' + username + ' correct?(y/n)')
if judge == 'y':
print('hello ' + username + '!')
else:
print('input name to creat a new count!')
username = new_user()
print('we will remember you ' + username + '!')
else:
username = new_user()
print('we will remember you ' + username + '!')
greet_user()