首页 > 代码库 > 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.jsonwith 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.jsontry:    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