zoukankan      html  css  js  c++  java
  • Python 参数设置

    1. 配置文件(ConfigParser模块)

    1.1 ConfigParser简介

    ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value的options内容。例如

    [db]
    db_host = 127.0.0.1
    db_port = 22
    db_user = root
    db_pass = rootroot
     
    [concurrent]
    thread = 10
    processor = 20
    

    1.2 ConfigParser 初始工作

    使用ConfigParser 首选需要初始化实例,并读取配置文件:

    import ConfigParser
    cf = ConfigParser.ConfigParser()
    cf.read("配置文件名")
    

    1.3 ConfigParser函数

    1.3.1. 获取所有sections

    >>> s = cf.sections()
    >>> print s
    ['db', 'concurrent']
    

    1.3.2 获得指定section的options

    >>> cf.options('db')
    ['db_host', 'db_port', 'db_user', 'db_pass']
    

    1.3.3 获得指定sections的配置信息

    >>> cf.items('db')
    [('db_host', '127.0.0.1'), ('db_port', '22'), ('db_user', 'root'), ('db_pass', 'rootroot')]
    

    1.3.4 获得指定sections的option的信息

    >>> cf.get("db", "db_host")
    '127.0.0.1'
    >>> cf.getint("db", "db_port")
    22
    

    同样有getfloat、getboolean

    以下注意:凡是改变文件内容的,都要最后写入。

    1.3.5 设置某个option的值

    >>> cf.set("db", "db_host", "127.1.1.1")
    >>> cf.write(open("config.ini", 'w'))
    

    写入后的文件内容为

    [db]
    db_host = 127.1.1.1
    db_port = 22
    db_user = root
    db_pass = rootroot
    
    [concurrent]
    thread = 10
    processor = 20
    

    1.3.6 添加一个section

    >>> cf.add_section("jihite")
    >>> cf.set("jihite", "int", "15")
    >>> cf.set("jihite", "bool", "True")
    >>> cf.set("jihite", "float", "3.14")
    >>> cf.write(open("config.ini", 'w'))
    

    写入后的文件内容为

    [db]
    db_host = 127.1.1.1
    db_port = 22
    db_user = root
    db_pass = rootroot
    
    [concurrent]
    thread = 10
    processor = 20
    
    [jihite]
    int = 15
    bool = True
    float = 3.14
    

    1.3.7 移除一个section

    >>> cf.remove_option("jihite", "int")
    True
    >>> cf.write(open("config.ini", 'w'))
    

    改变后的文件为

    [db]
    db_host = 127.1.1.1
    db_port = 22
    db_user = root
    db_pass = rootroot
    
    [concurrent]
    thread = 10
    processor = 20
    
    [jihite]
    bool = True
    float = 3.14
    

    1.3.8 移除一个option

    >>> cf.remove_section("jihite")
    True
    >>> cf.write(open("config.ini", 'w'))

    改变后的文件为

    [db]
    db_host = 127.1.1.1
    db_port = 22
    db_user = root
    db_pass = rootroot
    
    [concurrent]
    thread = 10
    processor = 20  

    1.4 ConfigParser举例

    方式二:解析参数(argparse模块)

    2. 解析参数(argparse模块)

    2.1 argparse简介

    argparse是python的命令行解析工具,它是Python标准库中推荐使用的编写命令行程序的工具。

    2.2 argparser 初始工作

    import argparse
    parser = argparse.ArgumentParser()
    

    类ArgumentParser定义为:

    class ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)
    

    参数的含义为

    2.2.1 prog:程序的名字,默认为sys.argv[0] 

    >>> parser = argparse.ArgumentParser(prog="myprogram")
    >>> parser.print_help()
    usage: myprogram [-h]
    
    optional arguments:
      -h, --help  show this help message and exit
    

    2.2.2 usage: 描述程序用途的字符串

    例子

    del.py

    import argparse
    if __name__=="__main__":
        parser = argparse.ArgumentParser()
        parser.add_argument('content', help='content')
        parser.add_argument('title', help='title')
        parser.add_argument('tolist', help='tolist')
        args = parser.parse_args()
        content, title, tolist = args.content, args.title, args.tolist
    
        mail=SMTP_SSL()
        mail.sendMail(content, title, tolist)

    执行

    python2.7 del.py
    usage: del.py [-h] content title tolist
    del.py: error: too few arguments  

    2.2.3

    更多参数

    parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")
    parser.add_argument('numbers', type=int, help="numbers to calculate", nargs='+')
    parser.add_argument('-s', '--sum', help="sum all numbers", action='store_true', default=True)
    parser.add_argument('-f', '--format', choices=['int', 'float'], help='choose result format', default='idsf')

    更详细参考

    2.3 添加参数选项

    http://www.cnblogs.com/linxiyue/p/3908623.html?utm_source=tuicool

    3. 综合实例

    要求

    1. 配置文件和输入参数两种方式,其中输入参数优先级高

    2. 参数包括配置文件、下载目录、进程个数、日志文件、日志类型

    3. 如果进程个数不知,那么默认为机器cpu核数

    4. 如果参数类型不知,那么默认为3

    def setArgs():
        parse = argparse.ArgumentParser(prog = "down_v9.py", usage="%(prog)s [options]")
        parse.add_argument("-c", "-config", type=str, help="配置文件")
        parse.add_argument("-o", "-outdir", type=str, help="下载目录")
        parse.add_argument("-p", "-processnum", type=int, help="进程个数")
        parse.add_argument("-l", "-logfile", type=str, help="日志文件")
        parse.add_argument("-lt", "-logtype", type=str, help="输出日志类型:1,只显示到屏幕;2,只输出到日志文件;3,即显示到屏幕又输出到日志文件")
        args = parse.parse_args()
        return args
    
    def get_args():
        args = setArgs()
        config = args.c
        outdir = args.o
        process_num = args.p
        logfile = args.l
        logtype = args.lt
    
        if config and os.path.isfile(config):
            cf = ConfigParser.ConfigParser()
            cf.read(config)
            s = cf.sections()
            if "con" in s:
                cons = cf.options("con")
                if outdir == None and "outdir" in cons:
                    outdir = cf.get("con", "outdir")
                if process_num == None and "process_num" in cons:
                    process_num = cf.getint("con", "process_num")
                if logfile == None and "logfile" in cons:
                    logfile = cf.get("con", "logfile")
                if logtype == None and "logtype" in cons:
                    logtype = cf.get("con", "logtype")
        if process_num == None:
            process_num = multiprocessing.cpu_count()
        if logtype == None:
            logtype = 3
    
        return [outdir, process_num, logfile, logtype]
  • 相关阅读:
    虚拟机搭建FISCO BCOS的区块链浏览器
    linux下安装cmake
    Compile error: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags
    Mac安装CMake
    Mac下如何添加User到group中
    Macos 安装md5sum、sha1sum、md5deep、sha1deep
    Support Vector Regression(SVR) 资料
    Python pandas dataframe
    python用pd.read_csv()方法来读取csv文件
    python pandas 交叉表, 透视表
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/4460855.html
Copyright © 2011-2022 走看看