在1内修改的文件名列表

2024-05-15 15:37:52 发布

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

我有一个脚本片段,它将创建一个文件列表来扫描关键字。。你知道吗

问题是,日志文件的总容量约为11gb。当我在shell中使用grep搜索它们时,大约需要4到5分钟。当我使用python脚本执行此操作时,它只会挂起服务器到需要重新启动服务器的程度。你知道吗

它会导致整个服务器崩溃,这似乎不对,但实际上我不需要它来滚动浏览所有的文件,只需要那些上周修改过的文件。你知道吗

到目前为止我已经知道了:

 logs = [log for log in glob('/var/opt/cray/log/p0-current/*') if not os.path.isdir(log)]

我想我需要在这之前添加一些东西来初步筛选出错误的文件?你知道吗

我一直在用这种格式玩os.path.getmtime

logs = [log for log in glob('/var/opt/cray/log/p0-current/*') if not os.path.isdir(log)]

for log in logs:
    mtime = os.path.getmtime(log)
    if mtime < "604800":
       do-stuff (create a new list? Or update logs?)

这就是我现在所处的位置,它不起作用,但我希望有一些更优雅的我可以做的列表内联?你知道吗


Tags: 文件pathin服务器脚本log列表for
1条回答
网友
1楼 · 发布于 2024-05-15 15:37:52

取决于有多少文件名和多少内存(512MB VPS?),有可能您的内存不足,创建了两个包含所有文件名的列表(一个来自glob,另一个来自您的列表理解)。不一定是这样,但这就是我要做的。你知道吗

尝试切换到iglob(在引擎盖下使用os.scandir并返回一个迭代器)并使用生成器表达式,看看是否有帮助。你知道吗

另外,getmtime获取一个时间,而不是从现在开始的间隔。你知道吗

import os
import glob
import time

week_ago = time.time() - 7 * 24 * 60 * 60
log_files = (
    x for x in glob.iglob('/var/opt/cray/log/p0-current/*')
    if not os.path.isdir(x)
    and os.path.getmtime(x) > week_ago
)
for filename in log_files:
    pass  # do something

相关问题 更多 >