2014-06-10 8 views
11

Sto provando a utilizzare il file più recente nella directory "upload" con l'estensione ".log" che deve essere elaborata da Python. Io uso un server web Ubuntu e il caricamento dei file è fatto da uno script html. Il file caricato viene elaborato da uno script Python e i risultati vengono scritti in un database MySQL. Ho usato la risposta this per il mio codice.Python recupera il file più recente in una directory con una determinata estensione

import glob 
newest = max(glob.iglob('upload/*.log'), key=os.path.getctime) 
print newest 
f = open(newest,'r') 

Ma questo non sta ottenendo il file più nuovo nella directory, ma ottiene quello più vecchio. Perché?

+3

prova 'min' invece di' max' - la logica inversa * * ? –

+0

Questo mi dà il file più recente quando lo eseguo dalla console interattiva python. – Himanshu

+1

Pensandoci, potresti volere 'os.path.getmtime' - tempi di creazione e tempi di modifica sono diversi però ... quindi err ... non sicuro –

risposta

18

Il problema è che l'inverso logico max è min:

newest = max(glob.iglob('upload/*.log'), key=os.path.getctime) 

Per i vostri scopi dovrebbero essere:

newest = min(glob.iglob('upload/*.log'), key=os.path.getctime) 
+2

I nuovi arrivati ​​che cercano un modo per identificare l'ultimo file devono stare attenti perché il max getctime dovrebbe essere la data più recente, quindi la più recente. Trovo che max fornisca il file più recente su linux su AMD64 e raspberry pi. Mi chiedo cosa stava succedendo qui. – Paul

+0

@Paul infatti ... Ricordo quando ho risposto a questo pensando che l'approccio degli OP fosse corretto e suggerire che 'min' su' max' era davvero un suggerimento per vedere se volevano il più vecchio (o solo per vedere se il contrario fosse quello che loro davvero voluto) ... –

+0

@JonClements Ciao Sto facendo qualcosa di simile, afferrando un certo formato di file, dove deve essere l'ultimo e all'interno di una directory. Stavo chiedendo se ci sono dei modi per fare ciò usando solo i moduli 'os' senza usare' glob'? – yan

Problemi correlati