2013-02-08 3 views
11

Я создаю скрипт python, который будет обращаться к каждой строке из текстового файла (скажем File.txt) один за другим, а затем искать соответствующие файлы .py и .txt в системном каталоге. Например, если «COPY» (первая строка) открывается из «File.txt», то поиск будет выполнен для «COPY.py» и «COPY.txt». Если оба файла будут найдены, их дата изменения будет сравниваться. Код не имеет синтаксической ошибки. Но я получаю неправильный вывод.Как сравнить измененную дату двух файлов в python?

код My Питон:

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

Выход:

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 

Я не получаю, почему "COPY2" и "COPY3" дают "PASS". Возможно, я делаю это неправильно. Как и при изменении сравнения как "if (txttime < pytime)" в коде. Все результаты отображаются как «FAIL» на выходе.

+0

Вместо того, чтобы использовать сырые строки для окон путей, а не просто использовать прямую косую черту - он будет работать нормально (и также будет работать и на других платформах). –

+0

вы можете использовать ['os.stat (filename) .st_mtime'] (http://docs.python.org/2/library/stat.html#stat.ST_MTIME) здесь, он возвращает последнее время модификации. –

ответ

0

time.ctime возвращает строку и 'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

21

time.ctime() форматирует время как строки, так что вы сравниваете Струны "Fri Feb 08 16:34:43 2013" и "Sat Sep 22 14:19:32 2012" текстуально. Просто не делают этого и сравнить float сек, что getmtime() дает вам прямо:

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

Спасибо, сейчас он отлично работает. Моя проблема решена, но как мой код в предоставлении «Pass» все время, сравнивая строки. Это сравнение значений ASCII? – AshA

+0

@AshA Да. Он по существу сравнивает, будет ли строка 'Fri ...' появляться в словаре перед строкой' Sat ... ', что было бы потому, что' F' предшествует 'S'. – millimoose

+0

Большое спасибо. Теперь проблема и решения понятны. – AshA

Смежные вопросы