python,利用可变对象实现设置参数的自动回存
需求:json格式的设置文件,当设置文件的某一个设置值在使用中被改变,自动回存json文件。
demo.json的内容:
{ "a": { "b": { "c": { "d": { "e": [ "first" ] } } } } }
将['a']['b']['c']['d']['e'],这个多层的内容值设置为一个变量,当变量在使用中被改变之后,要求将自动其回存至json文件,而不用手动地再次输入['a']['b']['c']['d']['e']这样复杂的结构。
实现的脚本:
import json
# 读取JSON文件并分配参数
def read_json():
global json_data, var
with open('..\JSON\demo.json', 'r', encoding='utf-8') as file_json:
json_data = json.load(file_json)
var = json_data['a']['b']['c']['d']['e'] # 变量的定义。变量指向了一个列表
print(f'初始变量的内容为{var}')
read_json()
# 退出前
def before_quit():
global json_data
# 回存json文件
with open('..\JSON\demo.json', 'w') as file:
json.dump(json_data, file, indent=4)
while True:
user_input = input("请输入内容 (输入 'xxx' 退出): ")
if user_input.lower() == 'xxx':
before_quit()
print("程序结束。")
break
var[0] = user_input # 修改变量所指向的列表的元素的值
print(f"最后一次的输入: {user_input}")
代码解释和运行结果:
1、
# 读取JSON文件并分配参数
def read_json():
global json_data, var
with open('..\JSON\demo.json', 'r', encoding='utf-8') as file_json:
json_data = json.load(file_json)
var = json_data['a']['b']['c']['d']['e'] # 变量的定义。变量指向了一个列表
print(f'初始变量的内容为{var}')
这里,定义了两个变量json_data和var,这两个变量都指向和包含指向了同一个列表,其初始内容为[ "first" ]。我们知道,一个列表,它的内存地址是固定的,但它的元素内容是可变的,利用这个特性就可以实现变量的传递。
2、
while True:
user_input = input("请输入内容 (输入 'xxx' 退出): ")
if user_input.lower() == 'xxx':
before_quit()
print("程序结束。")
break
var[0] = user_input # 修改变量所指向的列表的元素的值
print(f"最后一次的输入: {user_input}")
var[0] = user_input:当用户输入内容后,var这个变量指向的列表的[0]这个元素被修改为输入的内容。我们知道,json_data也包含指向了这个列表,因此当var[0] 变量发生改变时,json_data的内容实际上也就随之改变了。
3、
def before_quit():
global json_data
# 回存json文件
with open('..\JSON\demo.json', 'w') as file:
json.dump(json_data, file, indent=4)
将改变后的json_data的内容写回json文件。
4、运行的结果记录:
第一次运行:
记住,第一次运行,最后一次输入的内容是”3“ 。
第二次运行:
可以看到,第二次运行的时候,第一次运行的最后一次输入的内容”3“被正确记录和读取了。
原文地址:https://blog.csdn.net/xulibo5828/article/details/140335013
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!