我想在根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)
答案 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)