2010-01-06 21 views
18

Estoy tratando de tener un script automatizado que entre en la carpeta creada más recientemente.Buscar la carpeta más reciente en un directorio en Python

que tienen algún código de abajo

import datetime, os, shutil 

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

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

No estoy seguro de cómo conseguir esto para comprobar la última fecha y hora a partir de ahora. ¿Algunas ideas?

Gracias

+0

Gracias Alex, que funciona perfectamente – chrissygormley

Respuesta

40

No hay rastro real del "tiempo creado" en la mayoría de OS/sistemas de ficheros: lo que se obtiene como mtime es el una vez que un archivo o directorio fue modificado (por ejemplo, crear un archivo en un directorio actualiza el mtime del directorio) - y desde ctime, cuando se ofrece, la hora del último cambio de inodo (s) o se actualizaría creando o eliminando un subdirectorio).

Suponiendo que está bien con, por ejemplo, "Última modificación" (y su uso del "creado" en la pregunta era sólo un error), se pueden encontrar (por ejemplo) todos los subdirectorios del directorio actual:

import os 

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

y obtener el que tiene la última -mtime (en Python 2.5 o mejor):

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

Si necesita operar en otro lugar que el directorio actual, que no es muy diferente, por ejemplo:

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 

la asignación latest_subdir hace n ot cambio dado, como all_subdirs, cualquier lista de rutas (ya sean rutas de directorios o archivos, esa llamada max obtiene la más reciente).

+2

Si la versión de Python utilizada no admite el argumento 'clave' (por ejemplo, 2.4), puede usar' latest_subdir = max ((os.path.getmtime (f), f) para f en all_subdirs) [1] ' –

1

He aquí una manera de encontrar la última directorio

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

también estoy buscando para crear un archivo txt con el nombre del directorio y la marca de tiempo. y este archivo txt se agregará después de ejecutar el script anterior cada 30 minutos. mi intención es crear un archivo txt con todos los subdirectorios nombre y ruta junto con el sello de tiempo wioth en una fila. ¿Cómo puedo hacer eso con el código anterior ya que la variable timestamp da algunos números de weired? – 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] 
4

Y una rápida de una sola línea:

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

Un forro para encontrar la última

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

Un forro para encontrar enésimo última

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