使用检索特定目录手术室步行()

2024-09-28 23:30:08 发布

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

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

如何使用pythonos.walk()实现这一点?我想返回要删除的会话目录列表sessions_to_delete = []

/root    
    /job1             (runs every one hour)    
        /session1
            /*log
        /session2
        /session3
    /job2
        /session1
        /session2

Tags: 文件目录脚本文件夹列表数量作业时间
2条回答

在这种情况下,用^{}列出所有目录可能更容易,以匹配您的层次结构模式。您可以使用^{}为每个目录获取一个时间戳来进行排序和筛选

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天前的截止日期示例,从^{}开始计算,它返回一个整数值,表示自1970年1月1日(UNIX纪元)以来经过的秒数。在

如果您需要对每个作业目录执行此操作,请对每个此类目录执行相同的操作,并合并结果列表:

^{pr2}$

你可以用os.path.getatime操作系统(路径)或os.path.getmtime操作系统(路径)找出文件夹的“旧”程度,然后对其执行所需的操作。。。 这里是关于操作系统路径模块https://docs.python.org/2/library/os.path.html#module-os.path

解决问题的一种方法是:

import os
import time

for folder in list_of_folders:
    if time.time() - os.path.getmtime(folder) > time_limit:
        delete_folder(folder)

如果您使用append()建立了\u文件夹的列表,那么您可以通过像这样简单地更改for循环来保存最后两个文件夹。在

^{pr2}$

相关问题 更多 >