2010-01-06 114 views
18

我想要一个自动脚本进入最近创建的文件夹。在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*') 

一些代码,我不知道如何得到这个从现在检查最新的时间戳。有任何想法吗?

感谢

+0

感谢亚历克斯,完美的作品 – chrissygormley 2010-01-07 10:14:45

回答

40

还有的“创建时间”没有实际的跟踪中最OS /文件系统:你会得到什么作为mtime是时间一个文件或目录是修改(例如在目录中创建一个文件更新目录的mtime) - 从ctime,当提供时,最新inode更改的时间(s o它将通过创建或删除子目录进行更新)。

假设你很好,例如, “最后一次修改”(和你的问题“创造”的使用只是一个错误),你可以找到(例如)在当前目录下的所有子目录:

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调用获取最新修改的路径)。

+2

如果正在使用的Python版本不支持'key'参数(例如2.4),则可以在all_subdirs中使用'latest_subdir = max((os.path.getmtime(f),f)f [1] ' – 2011-09-10 21:23:25

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) 
+0

我也在寻找与目录名称和时间戳创建一个txt文件。这个txt文件会在每30分钟运行一次上面的脚本后得到追加。我的意图是创建一个包含所有子目录名称和路径的txt文件,并将其与一行中的时间戳一起。我如何做到这一点与上面的代码作为时间戳变量gves一些weired数字? – learnningprogramming 2015-12-21 16:01:28

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] 
4

和快速的一行:

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

一个衬垫找到最新

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

一个衬垫找到的第n个最新

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