Python字典的setdefault()方法
setdefault(key[, default])
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.
如果键在字典中,返回这个键所对应的值。如果键不在字典中,向字典 中插入这个键,并且以default为这个键的值,并返回 default。default的默认值为None
代码语言:javascript复制>>> dict = {}
>>> dict [ 'key' ] = 'a'
>>>字典
{ 'key': 'a' }
>>> dict.setdefault('key', 'b') #键key存在,故返回简直a。
'一种'
>>>字典
{ 'key': 'a' }
>>> dict.setdefault('key0' , 'b' ) #键key0不存在,故插入此键,并以b为键值。
'b'
>>>字典
{ 'key0' : 'b' , 'key' : 'a' }
日志分析
利用字典分析apache访问日志的脚本,以提取IP地址,字节数和状态
代码语言:javascript复制#!/ usr / bin / env python
“”
用法:
apache_log.py some_log_file
该脚本使用一个命令行参数:要解析的日志文件的名称,然后解析lof文件并生成一个报告,该报告将远程主机与传输给它们的字节数相关联。
“”
导入 系统
def dictify_logline(line):
split_line = line.split()
return { 'remote_host' :split_line [ 0 ],'status' :split_line [ 8 ],'bytes_sent' :split_line [ 9 ]}
def generate_log_report(logfile):
report_dict = {}
对于 行 中 的日志文件:
line_dict = dictify_logline(行)
打印 line_dict
尝试:
bytes_sent = int(line_dict [ 'bytes_sent' ])
除了 ValueError:
继续
report_dict.setdefault(line_dict [ 'remote_host' ],[])。append(bytes_sent)
返回 report_dict
如果 __name__ == “ __main__” :
如果不是 len(sys.argv)> 1 :
打印 __doc__
sys.exit(1 )
infile_name = sys.argv [ 1 ]
尝试:
infile = open(infile_name,'r' )
除了 ValueError:
打印“您必须指定要解析的有效文件”
sys.exit(1 )
log_report = generate_log_report(infile)
打印 log_report
infile.close()