gpt4 book ai didi

python - 1 周内修改的文件名列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:58 24 4
gpt4 key购买 nike

我有一段脚本,它将创建一个文件列表来扫描关键字..

问题是,日志文件的总大小约为 11 GB。当我在 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?)

这就是我现在的处境,它不起作用,但我希望我可以用内联列表做一些更优雅的事情?

最佳答案

根据有多少文件名和多少内存(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

关于python - 1 周内修改的文件名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42329035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com