python如何调用参数配置文件_如何使用Python3实现json作为配置文件?

2023-10-31

当脚本重复使用时候,我们需要不断的去更新一些参数,这样使得时间浪费很多,效率也不高,这该怎么办呢?小编在遇到同样问题时,发现了一个可以解决的方式,那就是利用json,大家有需求的可以来看下哦~

相信大部分人遇到这个问题,最先尝试的是——py文件作为配置文件

下面做个示例,一起来看下吧~

建一个config.py源文件保存到主程序main.py所在路径下,将需要的配置参数用正常赋值语句保存下来像这样:# config.py

target_dir = r"E:\data"

interval_mins = 5

time_record = "201904011230"

# ......

在主程序开头加上

# main.py

from config import *

就实现了配置和程序的分离,非常方便。

但是有两个问题:

1.若是程序要修改配置文件中从某些参数就比较麻烦。比如主程序要在每次启动时读取到配置文件中的time_record变量,并在结束时将其保存为新的值以便下次使用。

2.若是将main.py打包成.exe可执行文件,config.py也会被一起打包进去,就无法再修改配置了。

接下来就是解决方案——json文件作为配置文件

和上文相同的例子,config.py改写成config.json是这样:{

"target_dir" = "E:/data",

"interval_mins" = 5,

"time_record" = "201904011230"

}

在main.py中增加两个函数分别用于读取和更新配置:# main.py

def read_config():

""""读取配置"""

with open("config.json") as json_file:

config = json.load(json_file)

return config

def update_config(config):

""""更新配置"""

with open("config.json", 'w') as json_file:

json.dump(config, json_file, indent=4)

return None

当通过config = read_config()获得的配置config是一个字典,不能直接使用如target_dir等键值当做变量使用,可以间接用如config["target_dir"]来当变量,但并不方便。通常做法是每个变量执行一次类似target_dir = config["target_dir"]的操作,如果配置变量较多就比较累了。

那么,重点来了:globals().update(config) # 知识点

globals()获得(模块级)全局变量所组成的字典,修改该字典等同修改全局变量,所以通过.update(config)可以将config字典内容转为变量。举个例子:# example

a_dict = {"key": "value"}

globals().update(a_dict)

print(key)

虽然没有显式定义变量key,但依然可以正确输出:value

接着说更新配置文件的事:

修改字典config后,只要update_config(config),就实现了配置文件config.json的更新,可以说是非常简单了。

大家也可以尝试以上内容,直接套用跑代码即可~如需了解更多python实用知识,点击进入PyThon学习网教学中心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python如何调用参数配置文件_如何使用Python3实现json作为配置文件? 的相关文章

  • Javascirp异步编程

    在上一篇彻底弄清Javascirpt中的同步和异步一问当中 介绍了Javascirp代码执行的概念 同步和异步的原理 学习过Javascript语言的同学都知道 从Javascript诞生之日起 就是一门单线程 非阻塞的脚本语言 Javas
  • ArcGIS Server开发Web GIS新手体验

    原创作者 lt 不详 gt 一 前述 原创作品网址 http www vscodes com article 3 2379 html 以下针对于windows操作系统 net开发环境 ArcGIS Server是ESRI公司最新推出的服务器
  • java一行代码实现集合写入Excel表格生成数据

    这里使用maven构建项目 导入依赖
  • 高精度加法c++

    介绍 当我们加出来是一个特别大的数 开了long long都会爆的时候 我们就会用到高精度加法了 原题链接 讲解 其实高精度加法就是模拟的竖式运算 竖式运算会出现进位的情况 比如说最高位的这个1是进位 比原来的3位还多出1位 那么我们就应该
  • 语音去噪深度学习模型论文总结(大多基于transformer)

    深度学习模型 我总结了之前看的模型 并又寻找了基于transformer的模型 挑选了四个性能较好 评判标准是各种语音评价指标 该论文提出的模型与已有模型相比较得到的结果 的模型 其中前面三个是基于transformer的模型 最后一个是基
  • 晒问答

    1 如果好人没好报 还要不要做好人 如果做好人的意义是为了让自己有好报 那便永远逃不出世间规律的死循环 自己的命运和选择要牢牢掌握在自己手中 不做一个被世俗绑架来的好人 也不做一个害怕背负骂名的坏人 2 看书太少和不爱思考哪个更致命 给纯粹
  • Windows 解决端口占用方法

    查询9200端口 netstat nao findstr 9200 删除端口关联进程PID taskkill pid 11560 F
  • ORA-12505, TNS:listener does not currently know of SID given in connect desc

    出现以上的问题是无法识别SID 解决方法如下 1 找到以下目录 opt oracle product 10 2 0 db 1 network admin 修改listener ora find name listener ora即可找到该文
  • 带隔离变压器的DC/DC单端正激变换电路设计与Simulink仿真

    前期已经介绍了4种DC DC变换电路 这4种电路有一个共同特点 输入输出直接电气连接 之间没有做隔离措施 但是在实际应用中 由于电压等级的变换 安全 系统串并联等原因 开关电源的输入和输出之间需要进行电气隔离 在基本的非隔离DC DC变换电
  • R语言课程资料

    第一节 R语言简介 R语言简介 R 既是一种语言 R是一种解释性语言 也是一个软件由AT T贝尔实验室的S语言发展而来具有统计分析功能和强大的作图功能开源软件 目前在 R 网站上有 17500个程序包 涵盖了基础统计学 社会学 经济学 生态
  • 【ARM】在NUC977上搭建基于boa的嵌入式web服务器

    一 实验目的 搭建基于arm开发板的web服务端程序 通过网页控制开发板LED状态 二 boa简介 Boa服务器是一个小巧高效的web服务器 是一个运行于unix或linux下的 支持CGI的 适合于嵌入式系统的单任务的http服务器 源代
  • C# 调用SQL Server存储过程,传入参数,返回查询结果,更新dataGridView

    调用SQL Server存储过程 传入参数 返回查询结果 using SqlConnection conn new SqlConnection connectionString String cmdText Screen 存储过程名 Sql
  • Bible读经体会

    诸天述说 神的荣耀 穹苍传扬他的手段 诗篇19 1 花草树木在喊叫 耶和华造我的 数学从耶和华而来 自然界自然启示从耶和华而来 里面体现了耶和华的创意无限和思路周全 我们默默欣赏着观看着 今天阅读了创世纪的一点点体会 做下笔记 请勿用验证的
  • Shell--基础--01--介绍

    Shell 基础 01 介绍 1 Shell 环境 Shell 编程需要2个环境 文本编辑器 能解释执行的脚本解释器 2 Linux 的 Shell 常见种类 Bourne Shell usr bin sh或 bin sh Bourne A
  • python dataframe索引转成列_Pandas之DataFrame对象的列和索引之间的转化

    约定 import pandas as pd DataFrame对象的列和索引之间的转化 我们常常需要将DataFrame对象中的某列或某几列作为索引 或者将索引转化为对象的列 pandas提供了set index reset index
  • vue 项目中引用cdn上的静态js文件

    vue 项目中引用cdn上的静态js文件 需求 一份静态配置文件放在cdn中 文件暴露出数据列表和公共方法 读取文件的配置数据和公共方法 初始化Action列表 const cdnUrl https cdn xxx js libs vm a
  • Bat延时退出窗口

    timeout t 5
  • 【Error】ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

    参考文章 如何解决version GLIBCXX 3 4 29 not found的问题 1 问题 在 wsl ubuntu20 04 运行 yolov8 时 出现以下错误 ImportError lib x86 64 linux gnu
  • san.js源码解读之工具(util)篇——each函数

    一 迭代器模式 在开始解析源码之前 先来看一下 javascript 设计模式 迭代器模式 如果没有接触过该模式的小伙伴可能一脸疑惑 表示没听说过 但是这个迭代器模式 可能你已经用了很久了只是不知道它的名字罢了 比如 jquery中的 ea

随机推荐

  • 个位数统计 C语言

    1021 个位数统计 15 分 给定一个 k 位整数 N dk 1 10k 1 d1 101 d0 0 di 9 i 0 k 1 dk 1 gt 0 请编写程序统计每种不同的个位数字出现的次数 例如 给定 N 100311 则有 2 个 0
  • python萤火虫算法_萤火虫算法-python实现

    1 importnumpy as np2 from FAIndividual importFAIndividual3 importrandom4 importcopy5 importmatplotlib pyplot as plt6 7 8
  • FileNotFoundError: [Errno 2] No such file or directory: 'template/

    1 在运行generate list py时一直出现找不到templates header html和templates footer html的错误提示 2 后来才发现是路径问题 由于webapp是另外新建的目录 所以对yate py中w
  • Opencv使用cascade方法训练自己的LBP特征分类器的全过程

    前言 刚刚才把自己训练的分类器整出来 现在来理一下整个过程 从制作正负样本开始一直到最后产生自己的分类器 xml文件 因为毕设的要求 可能要用Opencv训练识别模型 用以识别道路积水 Opencv上自带的只有一些识别脸 眼睛等模型 所以要
  • 逻辑表达式三种化简方法

    逻辑表达式三种化简方法 目录 公式化简法 卡诺图化简法 机器化简法 一 公式法化简 是利用逻辑代数的基本公式 对函数进行消项 消因子 常用方法有 并项法 利用公式AB AB A 将两个与项合并为一个 消去其中的一个变量 吸收法 利用公式A
  • Unity WebGL Calls Rust Wasm

    Unity WebGL Calls Rust Wasm Jin Qing s Column May 2023 Reference https zenn dev ruccho articles 261136f7bdb003 In this a
  • 【通信原理】数字基带传输的线路码型

    数字基带传输的线路码型 简单介绍数字基带传输的线路码型的信号波形的特点 以及生成方法 注意观察频谱 文末附Matlab代码 以下包括双极性NRZ 单极型NRZ 双极型RZ 单极型RZ 差分码 曼切斯特码 数字双相码 密勒码 CMI码 AMI
  • STM32+二氧化碳传感器(FS00301)

    配置串口4 uart c u8 USART4 RX BUF USART REC LEN 接收缓冲 最大USART REC LEN个字节 u16 USART4 RX STA 0 接收状态标记 void uart4 init u32 bound
  • Istio Java SDK API - 资源访问-VirtualService/Gateway/DestinationRule/ServiceEntry

    环境 参考上一篇文章 Java如何连接Istio 参考上一篇文章 访问Isito资源 VirtualService Gateway DestinationRule ServiceEntry 项目源码 package com you micr
  • QML控件类型:Tumbler

    一 描述 Tumbler 用于通过旋转轮子来选择一个值 Tumbler model 10 API 类似于 ListView 和 PathView 等视图的 API 可以设置模型和委托 并且 count 和 currentItem 属性提供对
  • html登录页面设计

    html登录页面设计实训 html和CSS概述 1 html HTML 是一种标记语言 用于定义网页的结构和内容 包括段落 标题 列表 链接等等 它使用标签来标识不同的内容 并且这些标签可以用于嵌套 2 CSS CSS 是一种样式表语言 用
  • R语言中 attach()与detach(),及with()的使用

    attach what pos 2L name deparse substitute what backtick FALSE warn conflicts TRUE 1 attach 是对what添加路径索引 避免重复输入what名称 参数
  • 数据分析利器Python——列表、元组和字典

    文章目录 目录 文章目录 前言 一 列表和元组 1 创建列表和元组 2 列表和元组的通用用法 2 1 通过索引使用元素 2 2 子序列 2 3 加法 2 4 乘法 2 5 in运算符 2 6 长度 最大值和最小值 2 7 序列封包和序列解包
  • hdu1253 胜利大逃亡(三维bfs索搜)

    http acm hdu edu cn showproblem php pid 1253 第一次做做三维的 思路跟二维的没有区别 这道题目第一次出现Memory Limit Exceeded 这种问题 找了很长时间才发现应该是先判断在存入
  • Java8中处理日期和时间的常用API

    场景 java8中引入了一个新包java time 包含了多数会用到的核心类 注 博客 https blog csdn net badao liumang qizhi 关注公众号 霸道的程序猿 获取编程相关电子书 教程推送与免费下载 实现
  • Modbus ASCII LRC生成

    Modbus ASCII的报文生成顺序为 1 生成PDU 2 生成LRC校验码 将LRC附加到PDU后面 3 将2中的数组转换成HEX格式的文本 4 在HEX格式文本的0位置插入冒号 在HEX格式文本的后面附加Windows换行符 生成LR
  • 什么是Kubernetes?

    刚刚进学校实验室 第一次开会导师和小组同学说了n次Kubernetes 从来没听过 一脸懵逼 Kubernetes也有很多人把它叫K8S 原文链接 http omerio com 2015 12 18 learn the kubernete
  • 双指针详解

    1 定义 顾名思义 双指针即用两个不同速度或不同方向的指针对数组或对象进行访问 通过两个不同指针的碰撞从而达到特定的目的 2 解决问题 在时间或空间条件有限的情况下使用单向遍历需要消耗大量的时间或者根本无法解决问题 这时候就需要我们使用双指
  • 使用IDEA打开eclipse项目

    文章目录 点击左上角的File New Project from Existing Sources 选择到要打开的项目路劲 选择好后点击OK 先勾选 Import project from external model 后选择Eclipse
  • python如何调用参数配置文件_如何使用Python3实现json作为配置文件?

    当脚本重复使用时候 我们需要不断的去更新一些参数 这样使得时间浪费很多 效率也不高 这该怎么办呢 小编在遇到同样问题时 发现了一个可以解决的方式 那就是利用json 大家有需求的可以来看下哦 相信大部分人遇到这个问题 最先尝试的是 py文件