1. 配置文件(ConfigParser模块)
1.1 ConfigParser简介
ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value的options内容。例如
|
1
2
3
4
5
6
7
8
9
|
[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 首选需要初始化实例,并读取配置文件:
|
1
2
3
|
import ConfigParser
cf = ConfigParser.ConfigParser()
cf.read(
"配置文件名"
)
|
1.3 ConfigParser函数
1.3.1. 获取所有sections
|
1
2
3
|
>>> s = cf.sections()
>>>
print
s
[
'db'
,
'concurrent'
]
|
1.3.2 获得指定section的options
|
1
2
|
>>> cf.options(
'db'
)
[
'db_host'
,
'db_port'
,
'db_user'
,
'db_pass'
]
|
1.3.3 获得指定sections的配置信息
|
1
2
|
>>> cf.items(
'db'
)
[(
'db_host'
,
'127.0.0.1'
), (
'db_port'
,
'22'
), (
'db_user'
,
'root'
), (
'db_pass'
,
'rootroot'
)]
|
1.3.4 获得指定sections的option的信息
|
1
2
3
4
|
>>> cf.get(
"db"
,
"db_host"
)
'127.0.0.1'
>>> cf.getint(
"db"
,
"db_port"
)
22
|
同样有getfloat、getboolean
以下注意:凡是改变文件内容的,都要最后写入。
1.3.5 设置某个option的值
|
1
2
|
>>> cf.set(
"db"
,
"db_host"
,
"127.1.1.1"
)
>>> cf.write(open(
"config.ini"
,
'w'
))
|
写入后的文件内容为
|
1
2
3
4
5
6
7
8
9
|
[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
|
1
2
3
4
5
|
>>> 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'
))
|
写入后的文件内容为
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[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
|
1
2
3
|
>>> cf.remove_option(
"jihite"
,
"int"
)
True
>>> cf.write(open(
"config.ini"
,
'w'
))
|
改变后的文件为
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[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
|
1
2
3
|
>>> cf.remove_section(
"jihite"
)
True
>>> cf.write(open(
"config.ini"
,
'w'
))
|
改变后的文件为
|
1
2
3
4
5
6
7
8
9
|
[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 初始工作
|
1
2
|
import argparse
parser = argparse.ArgumentParser()
|
类ArgumentParser定义为:
|
1
|
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]
|
1
2
3
4
5
6
|
>>> 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)
执行
|
1
2
3
|
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]
本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/4460855.html,如需转载请自行联系原作者
