python,利用可变对象实现设置参数的同步回存

发布于:2024-07-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

需求:json格式的设置文件,当设置文件的某一个设置值在使用中被改变,自动同步回存json文件。

demo.json的内容:

{
    "a": {
        "b": {
            "c": {
                "d": {
                    "e": [
                        "first"
                    ]
                }
            }
        }
    }
}
将['a']['b']['c']['d']['e'],这个多层的内容值设置为一个变量,当变量在使用中被改变之后,要求将自动其回存至json文件,而不用手动地再次输入['a']['b']['c']['d']['e']这样复杂的结构。

这里,将需要改变的值设置为一个列表,即内容为["first"]的这个列表。

实现的脚本:

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、将改变后的json_data的内容写回json文件。

def before_quit():
    global json_data
    # 回存json文件
    with open('..\JSON\demo.json', 'w') as file:
        json.dump(json_data, file, indent=4)

这样就实现了通过改变变量的方法来回存JSON文件的设计目标。

4、运行的结果记录:

第一次运行:

记住,第一次运行,最后一次输入的内容是”3“ 。

第二次运行:

 可以看到,第二次运行的时候,第一次运行的最后一次输入的内容”3“被正确记录和读取了。