2013-02-08 7 views
11

Ich erstelle ein Python-Skript, das nacheinander auf jede Zeile einer Textdatei (zB File.txt) zugreift und dann im Systemverzeichnis nach der entsprechenden .py- und .txt-Datei sucht. Wenn zum Beispiel auf "COPY" (die erste Zeile) von "File.txt" zugegriffen wird, wird nach "COPY.py" und "COPY.txt" gesucht. Wenn beide Dateien gefunden werden, wird ihr Änderungsdatum verglichen. Code hat keinen Syntaxfehler, aber ich bekomme die falsche Ausgabe.Wie vergleicht man das Änderungsdatum zweier Dateien in Python?

Mein Python-Code ist:

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') 

Ausgang:

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 

Ich bin nicht warum "COPY2" und "COPY3" geben "PASS" bekommen. Vielleicht mache ich es falsch. sowie zum Ändern des Vergleichs als "if (txttime < pytime)" im Code. Alle Ergebnisse werden als "FAIL" in der Ausgabe angezeigt.

+0

Stattdessen rohe Strings für Windows-Pfade zu verwenden, verwenden Sie stattdessen nur Slashes - es wird gut funktionieren (und wird auch auf anderen Plattformen arbeiten). –

+0

Hier können Sie ['os.stat (Dateiname) .st_mtime] (http://docs.python.org/2/library/stat.html#stat.ST_MTIME) verwenden, es wird die letzte Änderungszeit zurückgegeben. –

Antwort

0

time.ctime gibt einen String und 'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

21

time.ctime() formatiert eine Zeit als String, so dass Sie die Saiten "Fri Feb 08 16:34:43 2013" und "Sat Sep 22 14:19:32 2012" textlich zu vergleichen. Nur nicht das tun und vergleichen Sie die float s, dass getmtime() Sie gibt direkt:

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

Danke Es funktioniert jetzt gut. Mein Problem ist gelöst, aber wie mein Code beim Geben "Pass" die ganze Zeit durch den Vergleich der Strings. Ist es ein ASCII-Wertvergleich? – AshA

+0

@AshA Ja. Es vergleicht im Wesentlichen, ob die Zeichenfolge 'Fri ...' im Wörterbuch vor die Zeichenfolge 'Sat ...' kommen würde, was dann der Fall wäre, weil 'F' vor' S' steht. – millimoose

+0

Vielen Dank. Das Problem und die Lösungen sind jetzt klar. – AshA

Verwandte Themen