当前位置: 首页 > news >正文

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, varwith 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("程序结束。")breakvar[0] = user_input  # 修改变量所指向的列表的元素的值print(f"最后一次的输入: {user_input}")

代码解释和运行结果:

1、

# 读取JSON文件并分配参数
def read_json():global json_data, varwith 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("程序结束。")breakvar[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“被正确记录和读取了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Knife4j的原理及应用详解(七)
  • 探索大模型:袋鼠云在 Text To SQL 上的实践与优化
  • 技校专业群的生成机制研究
  • linux系统“/“目录比“/home“目录小
  • 多图详解入门级AI绘画 Midjourney工具注册使用流程,AI绘画必备工具
  • MySQL篇:日志
  • ubuntu计划任务反弹
  • php获取,昨,今,后天.... 本周,月,年...日期时间戳
  • 1.浅谈蓝牙BLE的总体框架
  • 【Mark笔记】基于Centos7.7更改SSH端口重启服务报错
  • SAP S4 销售组的定义和分配
  • WGS84坐标转换代码(JS版)
  • KVM虚拟机添加USB转串口设备
  • Github获8k Star!入选苹果CoreML模型库的Depth Anything是怎么做出来的?
  • 【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java|序列化异常StreamCorruptedException的解决方法
  • Median of Two Sorted Arrays
  • Mithril.js 入门介绍
  • Octave 入门
  • vue:响应原理
  • 创建一种深思熟虑的文化
  • 分布式任务队列Celery
  • 规范化安全开发 KOA 手脚架
  • 基于 Babel 的 npm 包最小化设置
  • 马上搞懂 GeoJSON
  • 设计模式走一遍---观察者模式
  • 微服务框架lagom
  • 一天一个设计模式之JS实现——适配器模式
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • #DBA杂记1
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C++17) std算法之执行策略 execution
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)windows配置JDK环境
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (小白学Java)Java简介和基本配置
  • (一一四)第九章编程练习
  • (转)c++ std::pair 与 std::make
  • (自用)gtest单元测试
  • ****三次握手和四次挥手
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .dwp和.webpart的区别
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET4.0并行计算技术基础(1)
  • .NET6 开发一个检查某些状态持续多长时间的类