使用os.walk()检索特定目录

伊曼纽尔·奥西莫苏(Emmanuel Osimosu)

我有一组作业(job1job2等)运行每隔一小时,并在完成后生成的文件夹(session1session2等),其中包含的日志文件。由于存储限制,我需要一个脚本,该脚本可以删除早于设置时间限制的会话目录,但还希望指定该脚本必须保留指定数量的会话目录,例如保留最新的2个会话,即使它们早于设置的会话时限。

如何使用python实现此目的os.walk()我想返回要删除的会话目录列表sessions_to_delete = []

/root    
    /job1             (runs every one hour)    
        /session1
            /*log
        /session2
        /session3
    /job2
        /session1
        /session2
马丁·彼得斯(Martijn Pieters)

在这种情况下,使用列出所有目录glob.glob()以匹配您的层次结构模式可能更容易您可以os.path.getctime()用来获取每个目录的时间戳,以对目录进行排序和过滤

from glob import glob
import os.path
import time

def find_sessions_to_delete(cutoff):
    # produce a list of (timestamp, path) tuples for each session directory
    session_dirs = [(os.path.getctime(p), p) for p in glob('/root/job*/session*')]
    session_dirs.sort(reverse=True)  # sort from newest to oldest
    # remove first two elements, they are kept regardless
    session_dirs = session_dirs[2:]
    # return a list of paths whose ctime lies before the cutoff time
    return [p for t, p in session_dirs if t <= cutoff]

cutoff = time.time() - (7 * 86400)  # 7 days ago
sessions_to_delete = find_sessions_to_delete(cutoff)

我包括了一个7天前的示例截止日期,由计算得出time.time(),该日期返回一个整数值,表示自1970年1月1日(UNIX纪元)以来经过的秒数。

如果需要在每个作业目录中执行此操作,请在每个目录中执行相同的工作然后合并结果列表:

def find_sessions_to_delete(cutoff):
    to_delete = []

    # process each jobdir separately
    for jobdir in glob('/root/job*'):
        # produce a list of (timestamp, path) tuples for each session directory
        session_dirs = [(os.path.getctime(p), p)
                        for p in glob(os.path.join(jobdir, 'session*'))]
        session_dirs.sort(reverse=True)  # sort from newest to oldest
        # remove first two elements, they are kept regardless
        session_dirs = session_dirs[2:]
        # Add list of paths whose ctime lies before the cutoff time
        to_delete.extend(p for t, p in session_dirs if t <= cutoff)

    return to_delete

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章