python 仅选择日志的最新时间戳文件

nhjlsmyf  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(108)

log目录包含的日志文件是sqlloaderscript.so每次运行时都会创建一个带有时间戳的新日志文件的结果。
SSTMNAD_POST_DATE.SQL.855964.20230307001856.log SSTMNAD_POST_DATE.SQL.2951016.20230306194622.log
我想只选择最新的文件并放弃剩余的文件。
你能告诉我如何在python中实现吗?

agxfikkp

agxfikkp1#

这里有一个办法。
os.listdir返回目录中的所有文件。因此,使用列表解析来创建仅包含实际日志文件的列表。
假设日志文件中的时间戳是YYYYMMDDHHMMSS,你可以使用max来返回最大的日期。如果它实际上是YYYYDDMMHHMMSS,那么你需要将字符串转换为datetime.datetime对象,以便正确排序。
最后,循环遍历日志文件列表,如果有多个日志文件,则调用os.remove删除其他日志文件(如果这就是您所说的“丢弃”)。

import os

LOG_DIRECTORY = r"C:\Users\Bobson Dugnutt\Log Files"

logfiles = [fn for fn in os.listdir(LOG_DIRECTORY)
            if "POST_DATE.SQL" in fn and fn.endswith(".log")]

newest_logfile = max(logfiles, key=lambda fn:fn.rsplit(".", maxsplit=2)[1])

print("Newest log file:", newest_logfile)

if len(logfiles) > 1:
    for filename in logfiles:
        if filename != newest_logfile:
            print("Deleting old log file:", filename)
            #os.remove(filename) # Uncomment this line

更新后的代码与上面的代码基本相同,但创建了一个日志文件列表,这些日志文件都具有最高的时间戳。旧代码只会返回一个日志文件,即使有多个文件具有相同的时间戳。

import os

LOG_DIRECTORY = r"C:\Users\Bobson Dugnutt\Log Files"

logfiles = [fn for fn in os.listdir(LOG_DIRECTORY)
            if "POST_DATE.SQL" in fn and fn.endswith(".log")]

newest_timestamp = ""
for logfile in logfiles:
    timestamp = logfile.rsplit(".", maxsplit=2)[1]
    if timestamp > newest_timestamp:
        newest_logfiles = [logfile]
        newest_timestamp = timestamp
    elif timestamp == newest_timestamp:
        newest_logfiles.append(logfile)

print("Newest logfiles:", *newest_logfiles, sep="\n")

if len(logfiles) > 1:
    for filename in logfiles:
        if filename not in newest_logfiles:
            print("Deleting old log file:", filename)
            #os.remove(filename) # Uncomment this line

相关问题