在Python中查找目录中最新的文件夹

39
我试图编写一个自动化脚本,以进入最近创建的文件夹。
下面是我的一些代码。
import datetime, os, shutil 

today = datetime.datetime.now().isoformat() 
file_time = datetime.datetime.fromtimestamp(os.path.getmtime('/folders*')) 

if file_time < today: 
    changedirectory('/folders*') 

我不确定如何让它检查最新的时间戳。有什么想法吗?

谢谢

6个回答

75

大多数操作系统/文件系统中实际上没有“创建时间”的真正跟踪:你得到的mtime是一个文件或目录修改的时间(例如在目录中创建文件会更新目录的 mtime) - 而从ctime中,如果提供的话,可以获得最新 inode 更改的时间(因此创建或删除子目录会更新它)。

假设您对例如“最后修改时间”感到满意(并且您在问题中使用“创建”只是一个错误),则可以查找(例如)当前目录下的所有子目录:

import os

all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]

并且获取最新的 mtime(在 Python 2.5 或更高版本中):

latest_subdir = max(all_subdirs, key=os.path.getmtime)

如果您需要在当前目录以外操作,那么也没有太大区别,例如:

def all_subdirs_of(b='.'):
  result = []
  for d in os.listdir(b):
    bd = os.path.join(b, d)
    if os.path.isdir(bd): result.append(bd)
  return result

latest_subdir 的赋值并不会改变,因为 max 调用获取的是最后修改的路径列表(包括文件或目录的路径)all_subdirs


2
如果使用的Python版本不支持key参数(例如2.4),则可以使用latest_subdir = max((os.path.getmtime(f),f) for f in all_subdirs)[1] - Dennis Williamson

23

查找最新的一行代码

# Find latest
import os, glob
max(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)

找到倒数第n个元素的简短方法

# Find n'th latest
import os, glob
sorted(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)[-n]

11

还有一个简短的一行:

directory = 'some/path/to/the/main/dir'
max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime)

9

Python版本3.4+

我们可以尝试pathlib,解决方案将只需一行代码

查找最新版本

import pathlib, os
max(pathlib.Path(directory).glob('*/'), key=os.path.getmtime)

获取第n个最新的
import pathlib, os
sorted(pathlib.Path(directory).glob('*/'), key=os.path.getmtime)[-n]

不错。当然你也需要导入 os - Tycho

1

这里有一种找到最新目录的方法

import os
import time
import operator
alist={}
now = time.time()
directory=os.path.join("/home","path")
os.chdir(directory)
for file in os.listdir("."):
    if os.path.isdir(file):
        timestamp = os.path.getmtime( file )
        # get timestamp and directory name and store to dictionary
        alist[os.path.join(os.getcwd(),file)]=timestamp

# sort the timestamp 
for i in sorted(alist.iteritems(), key=operator.itemgetter(1)):
    latest="%s" % ( i[0])
# latest=sorted(alist.iteritems(), key=operator.itemgetter(1))[-1]
print "newest directory is ", latest
os.chdir(latest)

我也想创建一个带有目录名称和时间戳的txt文件。每30分钟运行上述脚本后,该txt文件将被追加。我的意图是在一行中创建包含所有子目录名称、路径和时间戳的txt文件。由于时间戳变量给出了一些奇怪的数字,我该如何使用上述代码实现这一点? - learnningprogramming

0
import os, datetime, operator

dir = "/"
folders = [(f,os.path.getmtime('%s/%s'%(dir,f))) for f in os.listdir(dir) if os.path.isdir(f)]
(newest_folder, mtime) = sorted(folders, key=operator.itemgetter(1), reverse=True)[0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接