2010-04-28 40 views
6

Tengo un conjunto de carpetas y quiero poder ejecutar una función que buscará el archivo editado más recientemente y me dirá el nombre del archivo y la carpeta en la que se encuentra.Encontrar el archivo editado más reciente en python

diseño de carpeta:

root 
    Folder A 
     File A 
     File B 
    Folder B 
     File C 
     File D 
etc... 

Algún consejo para ayudarme a empezar como yo he golpeado un poco de una pared.

Respuesta

2

Puede utilizar

os.walk 

Ver: http://docs.python.org/library/os.html

+1

Mientras que este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcione el enlace para referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/18075324) – Deep

13

Usted debe mirar la función os.walk, así como os.stat, que puede dejarle hacer algo como:

import os 

max_mtime = 0 
for dirname,subdirs,files in os.walk("."): 
    for fname in files: 
     full_path = os.path.join(dirname, fname) 
     mtime = os.stat(full_path).st_mtime 
     if mtime > max_mtime: 
      max_mtime = mtime 
      max_dir = dirname 
      max_file = fname 

print max_dir, max_file 
+2

'os.path.getmtime()' es una abreviatura conveniente para 'os.stat (full_path) .st_mtime' –

+1

Aparece un error cuando ejecuto desde mi directorio de inicio: OSError: [Errno 2] No existe ningún archivo o directorio: './.config/chromium/SingletonLock' – armandino

+1

@armandino: Supongo que el problema es que hay un archivo de bloqueo que se está creado y luego eliminado muy rápidamente. Si se eliminó después de que 'os.walk' devolviera su nombre de archivo, pero antes de la llamada a' os.stat' entonces esperaría ver tal error. Si realmente necesita ejecutar una secuencia de comandos de este tipo en los directorios que tienen archivos que se eliminan de esa manera, recomendaría envolver la llamada a 'os.stat' en un bloque try/except. –

3
  • use os.walk para enumerar los archivos
  • use os.stat para obtener la marca de tiempo modificada de archivo (st_mtime)
  • ponga las marcas de tiempo y los nombres de archivo en una lista y ordénela por fecha y hora, la marca de tiempo más grande es el archivo editado más recientemente.
1

Utilice os.path.walk() para recorrer el árbol de directorios y os.stat().st_mtime para obtener el mtime de los archivos.

La función que pasa al os.path.walk() (el parámetro visit) solo necesita realizar un seguimiento del mtime más grande que se ve y dónde lo vio.

+0

'os.path.walk' está en desuso – SilentGhost

5

Ayuda a envolver el directorio incorporado caminando a una función que solo da acceso completo a los archivos. A continuación, sólo puede tomar la función que devuelve todos los archivos y escoger el que tiene el mayor tiempo de modificación:

import os 

def all_files_under(path): 
    """Iterates through all files that are under the given path.""" 
    for cur_path, dirnames, filenames in os.walk(path): 
     for filename in filenames: 
      yield os.path.join(cur_path, filename) 

latest_file = max(all_files_under('root'), key=os.path.getmtime) 
+0

Buen consejo: esto me ayudó en un pequeño proyecto en el que estaba trabajando. –

Cuestiones relacionadas