言うためのPython 2のドキュメントfilecmp()
:
浅いが指定されていて false でない限り、同一
os.stat()
の署名を持つファイルは等しいと見なされます。
署名を除いて同一である 2 つのファイルは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
ご覧のとおり、2 つのファイルのタイム スタンプ ( st_atime
、st_mtime
、およびst_ctime
) は明らかに同じではありませんが、2 つのファイルfilecmp.cmp()
が同一であることを示しています。私は何かを誤解していますかfilecmp.cmp()
、それとも の実装またはドキュメントにバグがありますか?
アップデート
Python 3 のドキュメントshallow
は言い換えられており、現在次のように述べられています。これは、が True の場合でも異なるタイムスタンプを持つファイルが等しいと見なされる可能性があることをより適切に意味するという意味でのみ改善されています。
浅いが真の場合、同一の
os.stat()
署名を持つファイルは等しいと見なされます。それ以外の場合は、ファイルの内容が比較されます。
FWIW私は、次のようなことを単純に言ったほうがよかったと思います:
浅いが真の場合、
os.stat()
署名が等しくない場合にのみファイルの内容が比較されます 。