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]