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

时间:2010-01-06 16:46:30

标签: 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*') 

我不知道如何从现在开始查看最新的时间戳。有什么想法吗?

由于

6 个答案:

答案 0 :(得分:48)

大多数操作系统/文件系统中没有“创建时间”的实际跟踪:您获得的mtime是文件或目录修改的时间(例如创建目录中的文件更新目录的mtime) - 从ctime开始,提供最新inode更改的时间(因此可以通过创建或删除子目录来更新)。

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

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分配不会改为给定all_subdirs任何路径列表 (无论是目录或文件的路径,max调用都是最新修改过的。)

答案 1 :(得分:7)

找一个最新的

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

找到最新的

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

答案 2 :(得分:6)

快速的单行:

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

答案 3 :(得分: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)

答案 4 :(得分: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]

答案 5 :(得分:0)

Python 3.4+ 版

我们可以试试pathlib,解决方案是一个班轮

查找最新内容

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

获取第 n 个最新版本

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