Подтвердить что ты не робот

Как сравнить измененную дату двух файлов в python?

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

Мой код Python:

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" на выходе.

4b9b3361

Ответ 1

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

Ответ 2

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):
    # ...