2013-02-08 5 views
11

Sto creando uno script python che accederà a ciascuna riga da un file di testo (ad esempio File.txt) uno alla volta, quindi cercherà i file corrispondenti ".py" e ".txt" nella directory di sistema. Per esempio, se "COPY" (la prima linea) si accede da "File.txt" quindi cercare sarà fatto per "COPY.py" e "copy.txt". Se vengono trovati entrambi i file, verrà confrontata la data di modifica. Il codice non ha errori di sintassi Ma sto ottenendo l'output sbagliato.Come confrontare la data di modifica di due file in python?

codice Python Il mio è:

for line in fileinput.input(r'D:\Python_Programs\File.txt'): 
    line = line[0:-1] 
    sc = ''.join((line,'.py')) 
    lo = ''.join((line,'.txt')) 
    for root, dirs, files in os.walk(r'D:\txt and py'): 
     if sc in files: 
      pytime = time.ctime(os.path.getmtime(os.path.join(root, sc))) 
      print(sc, ' :', pytime) 
      for root, dirs, files in os.walk(root): 
       if txt in files: 
        txttime = time.ctime(os.path.getmtime(os.path.join(root, txt))) 
        print(txt, ' :', txttime) 
        if (txttime > pytime): 
         print('PASS', '\n') 
        else: 
         print('FAIL', '\n') 

uscita:

COPY.py  : Mon Aug 27 10:50:06 2012 
COPY.txt : Mon Feb 04 11:05:31 2013 
PASS  #Expected = PASS 

COPY2.py : Fri Feb 08 16:34:43 2013 
COPY2.txt : Sat Sep 22 14:19:32 2012 
PASS  #Expected = FAIL 

COPY3.py : Fri Feb 08 16:34:53 2013 
COPY3.txt : Mon Sep 24 00:50:07 2012 
PASS  #Expected = FAIL 

Non ricevo perché "COPY2" e "COPY3" stanno dando "PASS". Forse lo sto facendo in modo sbagliato. Oltre a modificare il confronto come "if (txttime < pytime)" nel codice. Tutti i risultati vengono visualizzati come "FAIL" in uscita.

+0

Invece di usare le stringhe prime per percorsi di Windows, invece basta usare le barre - che funzionerà bene (e funziona anche su altre piattaforme). –

+0

puoi usare ['os.stat (nomefile) .st_mtime'] (http://docs.python.org/2/library/stat.html#stat.ST_MTIME) qui, restituisce l'ultima ora di modifica. –

risposta

0

time.ctime restituisce una stringa e 'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

21

time.ctime() formatta un momento come una stringa, quindi si sta confrontando le corde "Fri Feb 08 16:34:43 2013" e "Sat Sep 22 14:19:32 2012" testualmente. Basta non farlo e confrontare i float s che getmtime() ti dà direttamente:

pytime = os.path.getmtime(os.path.join(root, sc)) 
# ... 
txttime = os.path.getmtime(os.path.join(root, txt)) 
# ... 
if (txttime > pytime): 
    # ... 
+0

Grazie Funziona bene ora. Il mio problema è risolto, ma come il mio codice nel dare "Passa" tutto il tempo confrontando le stringhe. E 'un confronto di valori ASCII? – AshA

+0

@AshA Sì. Confronta essenzialmente se la stringa 'Ven ...' verrebbe nel dizionario prima della stringa 'Sat ...', che sarebbe perché 'F' viene prima di' S'. – millimoose

+0

Grazie mille. Il problema e le soluzioni sono chiari ora. – AshA

Problemi correlati