python日志解析

2020-01-14 14:45:23 浏览数 (1)

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() 

0 人点赞