使用Python删除日志文件中不必要的行

2024-04-24 03:59:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 文件服务器脚本文件夹信息trace空间
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

你可以按计划运行,而且运行速度非常快

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

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

您必须手动更改输入文件的名称原始.log,最终输出文件('修剪.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日志'(确保您在那里有写入权限)。你知道吗

修剪得开心!你知道吗

相关问题 更多 >