【问题标题】:Deleting unnecessary lines within log files using Python使用 Python 删除日志文件中不必要的行
【发布时间】:2015-03-26 14:48:12
【问题描述】:

我正在生成包含大量信息的日志文件。它们开始占用服务器上的大量空间。现在这些日志是必要的,但很多信息不是!有人可以帮我编写一个 python 脚本,删除文件夹中所有日志文件中包含“[TRACE]”的所有行。谢谢!

【问题讨论】:

  • 我会说为此使用 python 是矫枉过正的。如果您使用的是 Linux - 使用 sed: sed '/[TRACE]/d' filename.txt

标签: python file logging directory


【解决方案1】:

一个非常简单的解决方案(假设您可以将完整的日志文件加载到内存中)是可以直接在python解释器中执行的单行:

open('trimmed.log', 'w+').writelines([l for l in open('original.log').readlines() if '[TRACE]' not in l])

您必须手动更改输入文件的名称('original.log'),最终还要更改输出文件的名称('trimmed.log')。

更进一步的是这样的函数(这样您就可以在循环中为所有文件调用它):

def filter_logs(log_path, target_string='[TRACE]'):
    with open(log_path) as infile:
        with open(log_path + '.notrace.log', 'w+') as ofile:
            for log_line in infile.readlines():
                if target_string not in log_line:
                    ofile.write(log_line)

文件处理程序正在被明确处理(因此有两个“with”语句),正如我之前所说,它允许您将路径传递给日志文件,甚至可以更改要比较的字符串(如果要删除)包含其他字符串的行。它将在您的原始日志旁边写入一个文件,但后缀为“.notrace.log”(确保您在那里具有写入权限)。

修剪愉快!

【讨论】:

    【解决方案2】:

    在我看来使用 Python 来完成这样的任务有点过头了

    解决方案 (Linux)

    sed '/[TRACE]/d' filename.txt | tee filename.txt
    

    结果

    [~]% cat filename.txt 
    [TRACE] not needed
    needed
    needed2
    not needed again [TRACE]
    
    [~]% sed '/[TRACE]/d' filename.txt | tee filename.txt
    
    [~]% cat filename.txt                                
    needed
    needed2
    

    你可以按计划运行它,它运行得非常快

    【讨论】:

    • []需要转义,否则会删除NEEDED之类的行。
    猜你喜欢
    • 2018-10-07
    • 2015-10-14
    • 1970-01-01
    • 2014-07-02
    • 2017-01-02
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多