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

40 投票
6 回答
66429 浏览
提问于 2025-04-15 17:42

我想写一个自动化脚本,让它进入最近创建的文件夹。

下面是我写的一些代码:

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 个回答

12

这里有一句简单的代码:

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

一行代码来找到最新的

# 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]
76

在大多数操作系统和文件系统中,其实并没有“创建时间”的记录。你看到的mtime是文件或文件夹的修改时间(比如说,在一个文件夹里创建一个文件会更新这个文件夹的修改时间)。而ctime(如果有的话)是指最新的inode变化时间(这会在创建或删除子文件夹时更新)。

假设你只关心“最后修改时间”(而你在问题中提到的“创建时间”只是个错误),你可以找到当前目录下的所有子文件夹:

import os

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

然后获取最新修改的那个子文件夹(在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赋值不会改变,all_subdirs是任何路径的列表(无论是文件夹还是文件),那条max调用会得到最后修改的那个。

撰写回答