在根路径中获取最新目录

时间:2019-04-03 19:24:17

标签: python

我想在根directory中找到最新的directory

当前,此代码在根路径中找到所有directories,还发现了经过修改的time

import os
from datetime import datetime

root = r'D:\drivers'

def totimeformat(tm):
    return tm.strftime('%Y-%m-%d %H:%M:%S')

dirs = []
for dir in directories:
    d = os.path.join(root, dir)
    if os.path.isdir(d):
        print(d + '' + totimeformat(datetime.fromtimestamp(os.path.getatime(d))))
        dirs.append(d)

3 个答案:

答案 0 :(得分:2)

您的代码基本上是正确的。您只需要更改它即可反映您描述的逻辑:

import os
from datetime import datetime

root = r'D:\drivers'

def totimeformat(tm):
    return tm.strftime('%Y-%m-%d %H:%M:%S')

dirs = []
newestdir = None
newesttime = 0
for dir in directories:
    d = os.path.join(root, dir)
    if os.path.isdir(d):
        t = os.path.getatime(d)
        if t > newesttime:
            newestdir = d
            newesttime = t
print(newestdir + '' + totimeformat(datetime.fromtimestamp(newesttime)))

答案 1 :(得分:2)

您可以创建包含元组(timestamp, dir)的列表,并使用sorted()按时间戳进行排序。

排序后:第一个元素是最旧的目录,最后一个元素是最新的目录。

import os
from datetime import datetime

def totimeformat(tm):
    return tm.strftime('%Y-%m-%d %H:%M:%S')

root = r'D:\drivers'

dirs = []
for dir in os.listdir(root):
    d = os.path.join(root, dir)
    if os.path.isdir(d):
        dirs.append( (os.path.getatime(d), d) )

newest = sorted(dirs)[-1]
oldest = sorted(dirs)[1]

print(newest[1] + '' + totimeformat(datetime.fromtimestamp(newest[0])))
print(oldest[1] + '' + totimeformat(datetime.fromtimestamp(oldest[0])))  

您还可以获取三个最新的目录sorted(dirs)[-3:]

答案 2 :(得分:1)

您可以使用os.scandir在一个系统调用中获取给定目录中所有文件的所有信息,以提高效率,并可以将max函数与返回修改后的键的键函数​​一起使用给定时间以找到具有最新修改时间的目录:

os.path.join(root, max((f for f in os.scandir(root) if f.is_dir()), key=lambda f: f.stat().st_mtime).name)