gpt4 book ai didi

python - 如何从 Web 服务器日志文件中提取数据,并解析请求行部分?

转载 作者:行者123 更新时间:2023-11-28 22:38:50 26 4
gpt4 key购买 nike

下面给出了我试图从中提取信息的行示例。

[02/Jan/2015:08:07:32] "GET /click?article_id=162&user_id=5475 HTTP/1.1" 200 4352
[02/Jan/2015:08:08:43] "GET /click?article_id=139&user_id=19550 HTTP/1.1" 200 3078
[02/Jan/2015:08:09:01] "GET /click?article_id=87&user_id=9408 HTTP/1.1" 200 2005
[02/Jan/2015:08:09:18] "GET /click?article_id=175&user_id=9408 HTTP/1.1" 200 3467

我尝试了几种方法。其中之一是

with open('C:/Users/.../access_log/access.log', 'r') as read:      
for line in read:
if "click?" in line:
article_id = line.split('article_id=')[1]
user_id = line.split('user_id=')[1]
article.write(article_id)
user.write(user_id)

我需要提取日期article_idauthor_id 和最后两组数字。通过使用上面的代码,我的输出如下所示

对于 user_id 文件,输出如下所示

  5475 HTTP/1.1" 200 4352

此处 5475 是我需要的 ID,但该行的其余部分随附。同样,对于 article_id 文件,输出类似于

   162&user_id=5475 HTTP/1.1" 200 4352

这里 162 是我需要的值,但我再次得到了该行的其余部分。

我尝试的第二种方法是这个

for line in read:
article_id = re.match('.*article_id=(\d+)', line)
user_id = re.match('.*user_id=(\d+)', line)
if article_id and article_id.lastindex > 0:
ids.write(article_id.group(1))

但是我得到这样的输出

  1621398717554254614225905016411314518885592112332

我无法在 excel 中执行此操作,因为 excel 无法处理太多数据点,而且所有文件都无法正确加载。我还需要确保当我从每一行中提取数据点(datearticle_idauthor_id、....)时,每个数据点都对应同一行的其他数据点,这样我就可以查看是否存在缺失值。

本质上有一种方法可以改变它

[02/Jan/2015:08:07:32] "GET /click?article_id=162&user_id=5475 HTTP/1.1" 200 4352
[02/Jan/2015:08:08:43] "GET /click?article_id=139&user_id=19550 HTTP/1.1" 200 3078
[02/Jan/2015:08:09:01] "GET /click?article_id=87&user_id=9408 HTTP/1.1" 200 2005
[02/Jan/2015:08:09:18] "GET /click?article_id=175&user_id=9408 HTTP/1.1" 200 3467

进入这个

      Date                   Article_id    user_id       Response_code  Content size

02/Jan/2015:08:07:32 162 5475 200 4352
02/Jan/2015:08:08:43 139 19950 200 3078

最佳答案

您可以使用这个简单的正则表达式来拆分行:

re.split(r' ".*?=|&.*?=| .*?" ', line)

输出:

['[02/Jan/2015:08:07:32]', '162', '5475', '200 4352']

你也可以使用findall:

re.findall(r'\[(.*?)\].*?(\d+).*?(\d+).*?(\d+)\s(\d+)', line)

输出:

[('02/Jan/2015:08:07:32', '162', '5475', '200', '4352')]

您可以将 re.findall 分配给变量并使用对元素的简单访问,例如:

data = re.findall(r'\[(.*?)\].*?(\d+).*?(\d+).*?(\d+)\s(\d+)', line)
print data[0][0]
02/Jan/2015:08:07:32

注意:如果缺少任何值,您会看到它,但我的解决方案不会告诉您具体缺少哪个值。

关于python - 如何从 Web 服务器日志文件中提取数据,并解析请求行部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com