【问题标题】:How to extract text from log files in Python如何在 Python 中从日志文件中提取文本
【发布时间】:2021-01-21 11:56:57
【问题描述】:

我在网上找到了一些代码,并试图用它从多个日志文件中提取任何包含错误一词的文本行。我能够读取路径中的文件并将它们输出到屏幕上,但实际上无法提取其中包含“错误”的行。

我从在线搜索中汇总的代码如下。运行代码时,会显示所有 .log 文件并创建输出文件,但会列出实际文件名而不是我需要的行。在我拥有的九个 .log 文件中,我应该收到 5 行包含错误的信息。我确实找到了从 PDF 中提取信息的信息,但从我在网上看到的情况来看,这与我正在尝试做的完全不同。

每月大约 4-5 次,我们手动搜索 10-50 个 .log 文件以查找错误,我希望能够将所有日志转储到一个文件夹中并运行 python 脚本以非常快速地找到错误.我是不是走错了路?

import os
# defining location of parent folder
BASE_DIRECTORY = '/pending/PHS'
output_file = open('/pending/PHS/output.txt', 'w')
output = {}
file_list = []

# scanning through sub folders
for (dirpath, dirnames, filenames) in os.walk(BASE_DIRECTORY):
    for f in filenames:
        if 'log' in str(f):
            e = os.path.join(str(dirpath), str(f))
            file_list.append(e)

for f in file_list:
    print(f)
txtfile = open(f, 'r')
output[f] = []

for line in txtfile:
    if 'error' in line:
        output[f].append(line)
tabs = []

for tab in output:
    tabs.append(tab)

tabs.sort()

for tab in tabs:
    output_file.write(tab + '\n')
    output_file.write('\n')

for row in output[tab]:
    output_file.write(row + '')
    output_file.write('\n')
    output_file.write('----------------------------------------------------------\n')

【问题讨论】:

  • 在 Google 上搜索“grep”
  • 看起来您是在此处写入文件,而不是搜索/提取任何内容(“错误”除外),在这种情况下,ackgrep 会更容易

标签: python string file logging extract


【解决方案1】:

第一个评论。使用 with 语句来处理 IO 文件是一种很好的做法,该语句将在此类语句结束时自动关闭它们。

with Open(txtfile, 'r') as txt:
    list_of_lines = txt.readlines()

list_of_lines 现在已加载到内存中,并关闭了来自 txtfile 的读取流。

如果您自己创建这些日志,并且您知道单词“error”完全一样,并且每个单词都用空格分隔,您可以使用str 内置方法.split()

only_errors = []
for line in list_of_lines:
    if "error" in line.split(" "):
        only_errors.append(line)
output[txtfile] = only_errors

str.split() 方法创建一个字符串列表,用于分隔您指定的字符出现的单词(在本例中为空格,“”);然后语句if "error" in ["error", "is", "here"] 将评估 True 并继续将行附加到列表中。请注意,与您的方法的唯一区别是,对于使用语句 xx in yyyy 必须是多个 xx 对象的容器,而不是同一类型的 xx(在您的例如,它们都是字符串)。

就我个人而言,我经常使用这个系统。

regedit 模块 re 是您正在寻找的更复杂的字符串模式匹配,但我会留给您一些谷歌搜索和指向其docs的链接

fuzzywuzzy 是另一个使用 Levenshtein 距离的字符串匹配选项

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2015-04-03
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多