python 用于读取日志文件以确定未找到的 URL 列表的脚本 (404)

python script to read a log file to determine the list of URLs that were not found (404)

从给定的日志文件中,我需要找到未找到的 URL (404) 来自日志文件的样本数据是:

条目 1:

443623565414391809 2014-09-02T14:09:36 2014-09-03T00:48:42Z 4147981 demo-workablehr 54.198.230.235 Local3 Info heroku/router at=info method=GET path="/api/accounts/3" host=workabledemo.com request_id=73ffd4fc-c86c-41ca-a737-91da110fbc39 fwd="50.31.164.139" dyno=web.2 connect=5ms service=17ms status=404 bytes=444

条目 2:

443623565414391810 2014-09-02T14:10:27 2014-09-03T00:48:42Z 4147981 demo-workablehr 54.198.230.235 Local7 信息 app/web.2 [e1af99e5-64b4-4228-df-986023 ] [VISITOR #NEW] [GUEST] [1m[35mAAccount Load (1.2ms)[0m SELECT "accounts".* FROM "accounts" WHERE (accounts.approval_status != 'blocked') AND "accounts"."id" = 3 限制 1

这里的block()是'ESC'

我知道我需要打开一个文件并读取内容并查找 status=404 我如何使用 python3 执行此操作并且文件中的条目数为 30,000+

我试过这个:

count404 = 0
with open('C:\Users\Zee\Downloads\testLog.txt','r') as f:
    for line in f:
        for word in line.split():
            count404 += 1
print(count404)

我想知道是否有更好的方法,如果我采用这种方法,那么如何找到状态为 404 的 URL 列表

我对 python 和 Whosebug 还很陌生。 提前致谢

正如评论中所指出的,正则表达式是你最好的朋友, 这是示例方法

import re
count=0
fl=open('C:\Users\Zee\Downloads\testLog.txt','r')
fillines=fl.readlines()
fl.close()
for i in fillines:
  if re.search(r'status=404',i):
    count+=1

要列出状态为 404 的日志中的所有路径,我们可以再次使用正则表达式

import re
count=0
lst=[]
fl=open('C:\Users\Zee\Downloads\testLog.txt','r')
fillines=fl.readlines()
fl.close()
for i in fillines:
  if re.search(r'status=404',i):
    count+=1
    path=re.search(r'path="[/\w+/]+"',fillines[0]).group(0)#get path using regex
    path=path.split("path=")[1] #since we only want the url
    path=path.replace('"','') #we dont want the quotes in log
    lst.append(path)#since we only want the url