首页 > 代码库 > MyPython-->进阶篇-->存储数据json
MyPython-->进阶篇-->存储数据json
存储数据
程序要将用户提供的信息储存在列表和字典等数据结构中。用户关闭程序时,你几乎总是要保存他们的信息 一种简单的方式是使用模块json来存储数据
模块json能将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。还可以使用json在python程序之间分享数据,更重要的是,json数据格式并非python专用,这让你能够将以json格式储存的数据与其他编程语言的人分享。
Json 格式最初是由JavaScript开发的,但随后成了一种常见的格式
使用json.dump()和json.load()
我们来编写一个存储一组数字的简短程序,再编写一个将这些数字读取到内存中的程序,第一个程序使用json.dump()来储存这组数字,第二个程序将使用json.load()
函数json.dump()接受两个实参:要储存的数据以及可以用于存储数据的文件对象。下面是演示
import jsonnumber = [1,2,3,5]file_name = ‘number.json‘ #通过扩展名指纹文件存储的数据为json格式with open(file_name,‘w‘) as file_object: json.dump(number,file_object)
我们先导入json模块,再创建一个是数字列表,我们指定存放在number.json里,文件后缀是.json来指出文件存储的数据是json格式,我们再以写入模式打开文件,让json能见数据写入其中使用json.dup()将数据写入,我们没有写输出语句,打开这个文件查看,数据存储的格式与python一样
注意json.dump()方法,传递两个参数 第一个要写入的,第二个要存储的位置
再写一个程序,使用json.load()读取到内存中
with open(filename,‘r‘) as file_object: contents = json.load(file_object)print(contents)
这是在程序间共享数据的简单方式
保存和读取用户生成的数据
对于用户输入的数据,用json来保存大有裨益,因为如果不以某种方式进行存储,等程序停止运行时用户的信息将丢失。 看一个例子
用户首次运行程序时被提示输入自己的名字,再次运行程序时就记住他了
我们先储存名字
ipt = input(‘enter your name‘)filename1 = ‘name.json‘with open(filename1,‘w‘) as file_object: json.dump(ipt, file_object)
再读取之前存储的名字
with open(filename1,‘r‘) as file_object: name_ipt = json.load(file_object)print(‘wleccome %s‘%name_ipt)
我们将这两个程序合并到一个内,在执行的时候先去name.json尝试获得用户名,如果没有这文件,用try-except处理这个错误,并入用户输入名字并保存到name.json中
filename1 = ‘name.json‘try: with open(filename1)as file_object: username = json.load(file_object)except FileNotFoundError: with open(filename1,‘w‘) as file_object2: user_ipt = input(‘enter your name i will rember you‘) json.dump(user_ipt,file_object2)else: print(username)
重构
我们经常遇到代码能运行,但可以进一步的改进 将代码划分为一些类完成具体工作的函数,这样的过程称为重构。 重构让代码更清晰更容易理解更容易扩展。
以上代码主要功能是问候用户,我们把所有的代码放到名为greet_user()函数中
def greet_user(): ‘‘‘问候用户 并指出其名字‘‘‘ filename1 = ‘name.json‘ try: with open(filename1)as file_object: username = json.load(file_object) except FileNotFoundError: with open(filename1,‘w‘) as file_object2: user_ipt = input(‘enter your name i will rember you‘) json.dump(user_ipt,file_object2) else: print(username)
但是greet_user()不仅问候了用户,还在储存了用户名时获取他,没有的时候提示用户输入一个,我们将对greet_user()函数重构,让存储用户名的代码转移到另一个函数
def get_savename(filename): ‘‘‘将获取用户名没有返回none‘‘‘ try: with open(filename) as file_object: sname = json.load(file_object) return sname except FileNotFoundError: return Nonedef get_newname(filename): ‘‘‘没有的时候提示玩家输入并存储‘‘‘ with open(filename,‘w‘) as file_object: newname = input(‘enter you name i will rember you‘) json.dump(newname,file_object) return newnamedef geet_username(filename): ‘‘‘主函数 如果name有读取,如果没有输入‘‘‘ user_name =get_savename(filename) if user_name: print(user_name) else: newname = get_newname(filename) print(newname)geet_username(‘name.json‘)
MyPython-->进阶篇-->存储数据json