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

chr*_*ley 23 python

我正在尝试使用自动脚本进入最近创建的文件夹.

我在下面有一些代码

import datetime, os, shutil 

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

if file_time < today: 
    changedirectory('/folders*') 
Run Code Online (Sandbox Code Playgroud)

我不知道如何从现在开始检查最新的时间戳.有任何想法吗?

谢谢

Ale*_*lli 54

还有的"创建时间"没有实际的跟踪中最OS /文件系统:你得到的是mtime一个文件或目录的时间修改(因此,例如创建一个目录中的文件更新该目录的修改时间) -和ctime,提供时,最新inode更改的时间(因此将通过创建或删除子目录来更新).

假设您没有使用例如"last-modified"(并且您在问题中使用"created"只是一个错误),您可以找到(例如)当前目录的所有子目录:

import os

all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]
Run Code Online (Sandbox Code Playgroud)

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

latest_subdir = max(all_subdirs, key=os.path.getmtime)
Run Code Online (Sandbox Code Playgroud)

如果你需要在当前目录以外的地方操作,那就不一样了,例如:

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
Run Code Online (Sandbox Code Playgroud)

latest_subdir转让不改变给定的,因为all_subdirs,路径任何列表(无论是目录或文件的路径,即max通话中获取最新的修饰一个).

  • 如果使用的Python版本不支持`key`参数(例如2.4),则可以在all_subdirs中使用`latest_subdir = max((os.path.getmtime(f),f)f)[1]` (2认同)

Uts*_*Uts 9

Python 版本 3.4+

我们可以尝试pathlib,解决方案将是一个衬垫

查找最新

import pathlib, os
max(pathlib.Path(directory).glob('*/'), key=os.path.getmtime)
Run Code Online (Sandbox Code Playgroud)

获取最新第 n 个

import pathlib, os
sorted(pathlib.Path(directory).glob('*/'), key=os.path.getmtime)[-n]
Run Code Online (Sandbox Code Playgroud)


小智 8

快速的单线:

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


Pre*_*and 8

一个班轮找到最新的

# Find latest
import os; import glob
max(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)
Run Code Online (Sandbox Code Playgroud)

一个班轮找到最新的

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