我想将系统日志文件解析为csv格式

时间:2017-05-26 12:07:30

标签: python csv

  

没有跑?“ 1月23日16:54:16 pfsense php:rc.start_packages:The   命令'/usr/local/etc/rc.d/radiusd.sh stop'返回退出代码'1',   输出是'radiusd not running?'

     

Jan 23 16:54:19 pfsense php:rc.start_packages:[FreeRADIUS]:XMLRPC   同步从超时150秒开始。

     

Jan 23 16:54:19 pfsense php:rc.start_packages:[FreeRADIUS]:XMLRPC   由于以下错误导致与'20 .20.20.2'同步中止:   配置错误的复制目标端口。

     

Jan 23 16:54:19 pfsense php:rc.start_packages:[FreeRADIUS]:XMLRPC   同步即将结束。

     

Jan 23 16:54:19 pfsense php:rc.start_packages:该命令   '/usr/local/etc/rc.d/radiusd.sh stop'返回退出代码'1',   输出是'radiusd not running?'

     

Jan 23 16:54:21 pfsense php:rc.start_packages:[FreeRADIUS]:XMLRPC   同步从超时150秒开始。

我想通过python将系统日志文件的上述数据解析为csv文件。首先,我尝试了以下代码

    import csv
    import itertools 

    with open('system.log', 'r') as in_file:
        stripped = (line.strip() for line in in_file)
        lines = (line for line in stripped if line)
        grouped = zip(*[lines] * 7)
        with open('system.csv', 'w') as out_file:
            writer = csv.writer(out_file)
            writer.writerow(('month', 'day', 
    'time','pfsense','type','package','comment'))
            writer.writerows(grouped)

标题完美无缺,但文件实际上并未转换为csv。因此,我将文件转换为分隔文本文件,并使用以下代码进行解析。

    import csv
    with open('systemExcel.txt', "r") as infile, open('systeExcel.csv', 'w') 
    as outfile:in_txt = csv.reader(infile, delimiter = '\t')
        out_csv = csv.writer(outfile)
        out_csv.writerows(in_txt)

以上代码工作正常。但我需要一个脚本,可以将原始日志文件数据转换为带有标题的csv文件。

1 个答案:

答案 0 :(得分:1)

  

问题:...我需要一个可以将原始日志文件数据转换为带头文件的csv文件的脚本。

只读取一个数据行 考虑这个例子:

with open('system.csv', 'w') as out_file,
    open('system.log', 'r') as in_file:

    writer = csv.writer(out_file)
    writer.writerow(['month', 'day','time', 'pfsense', 'type', 'package', 'comment'])

    for line in in_file:
        columns = line[:-1].split(' ')
        columns[6] = ' '.join(columns[6:])
        writer.writerow(columns[:7])
  

<强>输出
  月,日,时,pfsense,类型,封装,注释   Jan,23,16:54:16,pfsense,php :, rc.start_packages :,命令...(为简洁省略)   Jan,23,16:54:19,pfsense,php :, rc.start_packages:,[FreeRADIUS]:XMLRPC ...(为简洁起见省略)   Jan,23,16:54:19,pfsense,php :, rc.start_packages:,[FreeRADIUS]:XMLRPC ...(为简洁起见省略)   Jan,23,16:54:19,pfsense,php :, rc.start_packages:,[FreeRADIUS]:XMLRPC ...(为简洁起见省略)   Jan,23,16:54:19,pfsense,php :, rc.start_packages :,命令...(为简洁省略)   Jan,23,16:54:21,pfsense,php :, rc.start_packages:,[FreeRADIUS]:XMLRPC ...(为简洁省略)

使用Python测试:3.4.2