python外部配置信息

1. 前言

程序中有很多的参数,在程序中直接改动参数会显得,麻烦而且容易出错,这时候就需要将参数集中到一块,进行统一的改动能够提高我们的开发速率。

2. 配置文件

2.1 文件读取

创建一个 xxx.ini格式的文件,内部格式[ mode_1], [mode_2] 表示一些参数是在不同的集合下的。
在这里插入图片描述
相关配置文件的用法

import configparser

config=configparser.ConfigParser()
config.read("./config.ini")

""" sections()是获取所有的[],理解为片段"""
sections=config.sections()
print("section:","",sections)

"""根据section,获取section内所有的参数名称,不涉及具体值"""
options=config.options(sections[0])
options2=config.options(sections[1])
print("option:","",options)
print("option:","",options2)

"""效果与options差不多但是更强大,但是能获得具体的数值,"""
items=config.items('mode_1')
print("items:","",items)


"""根据定位获得具体的数值"""
print("batch,","", config.get("mode_1","batch"))
print('getint:','',config.getint('mode_1', 'channels'))
print('getfloat:' ,' ' , config.getfloat('mode_1', 'lambda'))
print('getboolean:' ,' ', config.getboolean('mode_1', 'save'))

显示结果
在这里插入图片描述

2.2 配置文件写入

配置文件写入

list = config.sections()  # 获取到配置文件中所有分组名称
if 'mode_4' not in list:  # 如果分组type不存在则插入type分组
    config.add_section('mode_4')
    config.set('mode_4', 'qqq', "133")  # “133”比如加引号。

o = open('./config.ini','w')
config.write(o)
o.close()  # 不要忘记关闭

结果:
在这里插入图片描述

3. 外部传参

3.1 采用sys库进行传参

import sys  #引入模块
"""只在外部传入了wokao"""

str = sys.argv[1]

print(len(sys.argv))

str = sys.argv[0]
print ("fisrt str is :",str)

str1 = sys.argv[1]
print ("second str is :",str1)

结果展示,可以看到sys库进行传参的时候,只传入一个参数的时候,sys.argv列表会有两个成员,第一个是本身脚本运行的路径,第二个我们传入的参数。
在这里插入图片描述

3.2 使用argparse库

  1. 创建ArgumentParser() 对象
  2. 调用add_argument()脚本外添加函数
  3. 使用parse_args() 解析添加参数
import argparse 

parser = argparse.ArgumentParser() #创建对象
parser.add_argument('-a', type=int,default=10,help='input a int')  #添加参数
parser.add_argument('-save', action='store_true',help='save model or not')
args = parser.parse_args() #创建解析器进行解析
print(args.a)  #输出外部传入的参数

group = parser.add_mutually_exclusive_group()
group.add_argument("-m", "--male", action="store_true")
group.add_argument("-f", "--female", action="store_true")
#互斥参数,group内只能指定一个参数
parser.add_argument("-g", "--gender", default='male',
                    choices=['male', 'female'])

parser.add_argument()函数内部参数的含义:

  • 首个参数a是传入参数的名称,对应使用解析器进行解析。
  • type 是指传入参数的类型说明,有 int,float,string,bool等类型。
  • default是指该参数的默认数值,有default时,外部不传参也ok,因为该参数已经有默认了。
  • action 表示当触发的时候即为真,不触发的时候为假
  • help 帮助说明的信息。
  • choice 可选值,二选一么

pycharm 中调用输入参数的地方在这里插入图片描述
结果显示:
在这里插入图片描述
子解析器

def main_single(name, args):
    print("name: ", name)
    print("args: ", args)
    print("I am main_single")

# 添加一个子解析器
subparsers = parser.add_subparsers()

parser_single = subparsers.add_parser('single',help='run a single module')

# 对single 子解析器添加 action 函数。
parser_single.set_defaults(action=('single', main_single))

# require=True,是说如果命令行指定了single解析器,就必须带上 --name 的参数。
parser_single.add_argument("--name", '-n', action="store",
                           help="module name to run",
                           required=True)

args = parser.parse_args()

(name, functor) = args.action
if name in ["single"]:
    functor(name, args)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值