【问题标题】:Read an IIS log to pandas dataframe将 IIS 日志读取到 pandas 数据帧
【发布时间】:2013-06-21 08:22:53
【问题描述】:

我有一个 IIS 日志文件,其中包含以下格式的行:

61.245.163.59 - [16/May/2013:23:55:09 +0530] "GET /ehrm/Recruitment/Images/divider.gif HTTP/1.1" 404 1245 "http://www.example.com/ehrm/Recruitment/MyApplication.aspx?PRF_ID=000005&digest=6LL4BTSuW9YnE5R4T8k27Q" "Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0" GET /ehrm/Recruitment/Images/divider.gif - HTTP/1.1 www.example.com

我想从中获取一些列并构建一个数据框。在以下方法中,它只是构建一个包含一列的数据框。我想让每个拆分列成为数据框的一列?还有就是日志文件行的长度不是唯一的,那么如何通过这样的拆分来提高取值的准确性呢?

log_list = []
for line in f:
    ip = (line.split(' ')[0])
    time = (line.split(' ')[2])
    method = (line.split(' ')[4])
    status = (line.split(' ')[7])
    bytes = (line.split(' ')[8])
    referrer = (line.split(' ')[9])
    agent = (line.split(' ')[10])
    data = ip + ' ' + time + ' ' + method + ' ' + status + ' ' + bytes + ' ' + referrer + ' ' + agent
    log_list.append(data)
df = pandas.DataFrame(log_list)

【问题讨论】:

  • 你试过read_csv功能吗?像时间这样的列可能会有一些问题,但您可以在之后组合这些列。默认情况下,它应该确定分隔符是空格,但您可以传递参数sep='\s+' 来确定。
  • @TomAugspurger:谢谢!由于我找不到解决方案,我将拆分写入单独的文件,然后将其作为数据框导入。

标签: iis pandas


【解决方案1】:

下面的代码应该完成你想要做的事情:

from pandas import read_csv
log_file = 'filename.log'
df = read_csv(log_file, sep=r'\s+', usecols=[0, 2, 4, 7, 8, 9, 10])

read_csv documentation.

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2017-12-15
    • 2015-08-07
    • 2018-06-05
    相关资源
    最近更新 更多