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

用于读取日志文件以确定未找到的URL列表的python脚本(404),python,file-io,logfile,Python,File Io,Logfile,从给定的日志文件中,我需要找到找不到的URL 404 日志文件中的示例数据为: 条目1: 443623565414391809 2014-09-02T14:09:36 2014-09-03T00:48:42Z 4147981演示workablehr 54.198.230.235 Local3 Info heroku/router at=Info method=GET path=/api/accounts/3 host=workabledemo.com请求id=73ffd4fc-c86c-41ca

从给定的日志文件中,我需要找到找不到的URL 404 日志文件中的示例数据为:

条目1:

443623565414391809 2014-09-02T14:09:36 2014-09-03T00:48:42Z 4147981演示workablehr 54.198.230.235 Local3 Info heroku/router at=Info method=GET path=/api/accounts/3 host=workabledemo.com请求id=73ffd4fc-c86c-41ca-a737-91da110fbc39 fwd=50.31.164.139 dyno=web.2 connect=5ms服务=17ms状态=404字节=444

条目2:

443623565414391810 2014-09-02T14:10:27 2014-09-03T00:48:42Z 4147981演示工作炉54.198.230.235本地7信息应用程序/web.2[e1af99e5-64b4-4228-8e23-d9b6bab84f80][访客新][1米[35mAccount加载1.2ms[0米选择帐户。*来自帐户。批准状态!=“阻止”和帐户id=3限制1

这里的块是“ESC”

我知道我需要打开一个文件并读取内容,然后查找status=404 如何使用python3实现这一点,文件中的条目数为30000+

我试过这个:

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和StackOverflow相当陌生。
提前感谢

正如评论中指出的,regex是您在这里最好的朋友, 下面是示例方法

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的所有路径,我们可以再次使用regex

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

如果您遇到困难,为什么不尝试一下并向我们展示代码呢?我建议遍历日志文件行并选择那些包含可能具有in operator status=404的行。另外,欢迎使用SO。请花一些时间查看帮助中心,例如,在这里,您可以进一步编辑您的问题。不清楚您是否知道如何执行此操作我已经编辑了这个问题,请让我知道这是否有帮助。不要将行拆分为文字,检查行中的status=404,如果是,则进行进一步处理以提取您想要的内容。或者,也可以结合使用,因为这是搜索文本模式,您可能需要使用remodule使用正则表达式搜索以提取每行中的相关部分,例如使用Groups,实际上您可以删除!=无部分谢谢@progmatico谢谢大家!现在我正在尝试找出记录状态为404的URL列表的方法。我感谢您的帮助!所以您想要所有路径的列表s是404。@zee如果仅此而已,那么您可以将答案标记为已接受。否则,您可以发布进一步的疑问。