filecmp.cmp () игнорирует разные сигнатуры os.stat ()?

Документы Python 2 для filecmp () говорят:

Если shallow не задан и не является ложным, файлы с идентичные os.stat () подписи считаются равными.

Звучит как два идентичных файла, за исключением их сигнатуры os.stat () , будет считаться неравным, однако это не похоже на случай, как показано выполнением следующего фрагмента кода:

import filecmp
import os
import shutil
import time

with open('test_file_1', 'w') as f:
    f.write('file contents')
shutil.copy('test_file_1', 'test_file_2')
time.sleep(5)  # pause to get a different time-stamp
os.utime('test_file_2', None)  # change copied file's time-stamp

print 'test_file_1:', os.stat('test_file_1')
print 'test_file_2:', os.stat('test_file_2')
print 'filecmp.cmp():', filecmp.cmp('test_file_1', 'test_file_2')

Вывод:

test_file_1: nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0, st_nlink=0,
  st_uid=0, st_gid=0, st_size=13L, st_atime=1320719522L, st_mtime=1320720444L, 
  st_ctime=1320719522L)
test_file_2: nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0, st_nlink=0, 
  st_uid=0, st_gid=0, st_size=13L, st_atime=1320720504L, st_mtime=1320720504L, 
  st_ctime=1320719539L)
filecmp.cmp(): True

Как видите, временные метки двух файлов - st_atime , st_mtime и st_ctime - явно не одно и то же, однако filecmp.cmp () указывает, что они идентичны. Я что-то неправильно понимаю или есть ошибка либо в реализации filecmp.cmp () , либо в его документации?

Обновление

Документация Python 3 была перефразирована и в настоящее время говорится следующее, что IMHO является улучшением только в том смысле, что это лучше подразумевает, что файлы с разными отметками времени могут по-прежнему считаться равными, даже если shallow истинно.

Если shallow истинно, файлы с идентичными подписями os.stat () считаются равными. В противном случае сравнивается содержимое файлов.

FWIW Я думаю, было бы лучше просто сказать что-то вроде этого:

Если shallow истинно, содержимое файла сравнивается только тогда, когда os.stat () подписи не равны.

5
задан martineau 3 March 2015 в 12:37
поделиться