python学习笔记(十七)存储数据
1、为什么存储数据
很多程序都会要求用户输入信息,有时候这些信息是瞬时性的,但有时候用户会要求在关闭程序后,这些信息能够被保存起来。比如编写一个游戏,用户第一次运行游戏时,程序要求用户创建一个账户,那么程序应当自动将用户输入的账户信息存储下来,而不是在用户退出游戏后,信息也随之消失。
2、如何存储数据
在学习如何存储数据之前,我们先来了解一下JSON(JavaScript Object Notation)格式,该格式最初是由JavaScript开发的,但是由于其优越性,逐渐被包括Python在内的多种语言采用,这就意味着使用不同语言的人可以共享JSON格式存储的数据信息。
所以,在python中,一种简单的存储数据方式就是使用json模块,它帮助我们将简单的python数据结构转储到文件中,并在程序再次运行时加载文件中的数据。下面我们结合例子来简单学习一下 json.dumo() 和 json.load() 函数:
我们先创建一个空文件夹day_17。
接下来编写number_writer.py实现数据存储,并将代码文件存储在文件夹day_17中。
import json
numbers = [1, 3, 5, 7, 9]
filename = 'number.json'
with open(filename, 'w') as fo:
json.dump(numbers, fo)
运行代码,number_writer.py的相同目录,也就是文件夹day_17中会自动生成一个number.json文件。
我们打开看一下。
以上内容大家是不是觉得有点眼熟,没错,这与我们之前讲过的写入文件差不多,毕竟我们当时也说过写入文件是最简单的保存数据的方式,但是,还是有一些不同的——写入文件只能写入字符串,但是json格式的文件可以存储所有简单的Python数据结构。下面我们来解析一下代码。
在上述代码中,我们需要先导入模块json,这使得我们可以用句点表示法随意调用模块内的函数。然后我们创建了一个数字列表,并完成了初始化,这也是我们需要存储的数据结构。之后两行都与写入文件的操作十分相似,仅仅是文件的格式从 .txt 变成了.json。
但是最后一行就是区别,函数 json.dump() 接受两个实参,第一个是需要存储的数据,第二个则用于指定存储数据的文件对象。
下面我们继续学习 json.load() 函数,将上面存储的列表读取到内存中,编写 number_reader.py 文件,并保存在文件夹day_17中。
import json
filename = 'number.json'
with open(filename) as fo:
numbers = json.load(fo)
print(numbers)
运行结果为:
[1, 3, 5, 7, 9]
上述代码依然需要导入模块json,随后两行与读取文件相仿,不同之处在于使用了 json.load() 函数加载存储在number.json中的信息,并将其赋给变量numbers,再进行使用。上面只是初步了解了两个函数,下面我们来看程序与用户的简单互动。
import json
filename = 'language.json'
try:
with open(filename) as fo:
language = json.load(fo)
except FileNotFoundError: #如果指定的文件不存在
language = input("What's your favorite language? ")
with open(filename, 'w') as fo:
json.dump(language, fo)
print("I'll will tell you your favorite language next time.")
else:
print("You like " + language + " best!")
编写该程序并将其存储在dat_17文件夹中。
第一次运行程序,运行结果为:
What's your favorite language? python
I'll will tell you your favorite language next time.
打开文件夹day_17。
自动生成文件 language.json,打开。
用户输入的字符串已被存储,回到程序文件,第二次运行,运行结果为:
You like python best!
这里复习了异常。