一、理解
为什么要用json模块的格式读取写入?
1、由于python默认读取write()写入read()文件的数据格式为字符串(str),不能读取写入列表、字典等类型数据,所以需要采用json数据格式来存储数据。
2、json数据格式在多种语言中通用,有利于分享数据。
二、python读取写入json格式分别有2种不同形式
1、json.dump()用于存储写入列表至list.json文件。
import json
numbers = [2,1,4,3,4,5]
file_name = "list.json"
with open(file_name,'w') as f:
#写入方式1,等价于下面这行
json.dump(numbers,f) #把列表numbers内容写入到"list.json"文件中
#写入方式2
#f.write(json.dumps(numbers))
2、json.load()读取本地的list.json文件。
import json
file_name = "list.json"
with open(file_name) as f:
#读取方式1,等价于下面这行
list = json.load(f)
#读取方式1
#list = json.loads(f.read())
print(list)
三、json数据格式实战
实现功能:用户输入用户名,如果以前存储了用户名,就加载它,否则,就存储输入的用户名,并相应打印不同的问候提示语。
import json
import os
"""解析:判断json文件是否存在,获取文件中的列表,
判断输入的用户名是否已存在列表中,若存在,提示:欢迎回来!,
若不存在,提示:下次回来会记住!,并存储输入的用户名至文件中。"""
def search_file(filename):
"""封装判断name.json文件是否存在"""
if os.path.exists(filename):
#存在则直接调用函数search_username(),进一步验证用户名
search_username()
else:
#文件不存在,则创建包含空列表(为了后面添加列表元素)的json文件,再调用search_username()
names_list = []
with open(filename,"w+") as f:
json.dump(names_list,f)
search_username()
def search_username():
"""封装判断用户名是否存在并存储、打印相应内容"""
with open(filename,'r+') as f:
names_list = json.load(f)
if (username in names_list):
print("Welcome back " + username + "!")
else:
with open(filename, 'w') as f:
names_list.append(username)
json.dump(names_list, f)
print("We'll remember you when you come back, " + username + "!")
filename = "name.json"
username = input("what is name?\n ")
search_file(filename)
执行上述代码:
1、第一次输入新增用户名:chenyi,运行结果如下:
2、第二次输入已存在用户名:chenyi,运行结果如下:
此时name.json中的内容如下: