Json 简单说就是 JavaScript 中的对象和数组,所以这两种结构就是对象和数组两种结构(参见Json的格式以及使用),对应 Python 中的字典和列表两种数据结构。明白这一点后就知道,Python 操作 Json 文件本质就是操作列表或字典。
今天写了一个 Python 读写 Json 中列表的小程序来做练习。本文不作基本操作的介绍,只是基本操作的一种实践训练,模拟向文档中写入姓名字符串并将之读取的操作。
import json
def get_stored_name():
'''获取 json 文件中的对象'''
try:
with open("nameCollect.json", "r") as file_obj:
name_lsit = json.load(file_obj)
except FileNotFoundError:
name_lsit = None
file_obj.close()
return name_lsit
def get_new_name():
'''获取 json 文件中已有的列表,若文件不存在或文件为空,则创建一个空列表'''
try:
with open("nameCollect.json", "r") as file_obj:
name_list = json.load(file_obj)
except FileNotFoundError:
name_list = []
if name_list is None:
name_list = []
'''新输入一个字符串并追加到列表末尾写入 json 文件中'''
while True:
username = input("Please input a name(enter \"q\" to exit): ")
if username != "q":
name_list.append(username)
else:
break
with open("nameCollect.json", "w") as file_obj:
json.dump(name_list, file_obj)
file_obj.close()
return name_list
def say_hi():
'''向用户询问是执行读取操作还是执行写入操作'''
while True:
flg = input("Enter \"1\" to write names into the file, enter \"2\" to say \"Hi\": ")
if flg == "1": # 根据用户提示,向文件中写入数据
get_new_name()
elif flg == "2": # 根据用户提示,从文件中读取字符串列表
name_list = get_stored_name()
if not name_list:
name_list = get_new_name() # 如果文件为空,提示用户向文件中写入数据
break
else:
print("Sorry, you must input 1 or 2.")
'''若文件为空,告知用户;若文件中列表不为空,则将元素 依次打印出来'''
if name_list:
for name in name_list:
print("Hi, " + name + "!")
else:
print("Oh, you didn't input anything here.")
say_hi()
欢迎讨论。