2010-04-28 5 views
6

Ho un set di cartelle e voglio essere in grado di eseguire una funzione che troverà il file modificato più recente e dirmi il nome del file e la cartella in cui si trova.Trovare il file modificato più recentemente in python

layout della cartella:

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

Eventuali suggerimenti per ottenere mi ha iniziato come ho colpito un po 'di un muro.

risposta

2

È possibile utilizzare

os.walk 

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

+1

Mentre questo link può rispondere alla domanda, è meglio per includere le parti essenziali della risposta qui e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18075324) – Deep

13

Si dovrebbe guardare la funzione os.walk, così come os.stat, che può farvi fare qualcosa di simile:

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()' è una comoda scorciatoia per 'os.stat (full_path) .st_mtime' –

+1

Ricevo un errore quando corro dalla mia home directory: OSError: [Errno 2] Nessun file o directory di questo tipo: './.config/chromium/SingletonLock' – armandino

+1

@armandino: Sto indovinando che il problema è che c'è un file di blocco che viene creato e poi cancellato molto rapidamente. Se è stato cancellato dopo che "os.walk" ha restituito il suo nome file, ma prima della chiamata a "os.stat", ci si aspetterebbe di vedere un tale errore. Se fosse effettivamente necessario eseguire tale script su directory che hanno file cancellati in questo modo, raccomanderei di includere la chiamata a 'os.stat' in un blocco try/except. –

3
  • utilizzare os.walk per elencare i file
  • utilizza os.stat per ottenere il timestamp del file modificato (st_mtime)
  • inserisce sia timestamp e nomi di file in un elenco e ordinarlo per data/ora, il timestamp più grande è il file modificato più di recente.
1

Utilizzare os.path.walk() per attraversare l'albero delle directory e os.stat().st_mtime per ottenere il mtime dei file.

La funzione passata a os.path.walk() (il parametro visit) ha solo bisogno di tenere traccia del più grande mtime visto e dove è stato visto.

+0

'os.path.walk' è deprecato – SilentGhost

5

È utile per avvolgere la directory incorporata che cammina alla funzione che fornisce solo percorsi completi ai file. Poi si può solo prendere la funzione che restituisce tutti i file e scegliere quello che ha il più alto ora di modifica:

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

Un buon consiglio: questo mi ha aiutato in un piccolo progetto su cui stavo lavorando. –