自学内容网 自学内容网

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)!