2017-10-03 16 views
0

Windows 7を使用して、私は2つのフォルダ、ファイルを処理する「マスター」フォルダ、およびNAS4Freeサーバーの「バックアップ」フォルダを持っています。filecmp.cmp()はいつ偽陽性または偽陰性を返しますか?

私は800以上のjpgファイルを持っています。合計サイズは2.6GBで、サイズは124KBから16MBです。

I頻繁に「スワップ」ファイル名、すなわち:

rename 01-020.jpg 99-020.jpg 
rename 01-040.jpg 01-020.jpg 
rename 99-020.jpg 01-040.jpg 

私はまた、新しいファイルを追加 - 01-030.jpgを - そして、すなわち、セットの番号を変更:

rename 01-020.jpg 99-020.jpg 
rename 01-030.jpg 99-040.jpg 
rename 01-040.jpg 99-060.jpg 
rename 99-020.jpg 01-020.jpg 
rename 99-040.jpg 01-040.jpg 
rename 99-060.jpg 01-060.jpg 

を保つためにマスターフォルダとバックアップフォルダが同期していると、最初にフォルダ全体のXCOPYまたはROBOCOPYを調べましたが、それは時間がかかりすぎます。特に、ファイルの大部分が変更されていないためです。

私はPython 3のソリューションを考え出しています。私はfilecmp.cmp()のドキュメントを読んだ。どのような私を心配することは文です:

「...彼らは同じように見える場合はTrueを返します...」(強調鉱山)。

浅い= Falseを指定すると、大部分の比較が一致するときにfilecmpが1,600+ファイルの内容を比較するようになります。

shallow = Trueを指定すると、filecmpはos.stat()関数を使用します。 filecmpがTrueを返す2つのファイルで、その関数でテストを実行すると、statによって返される値のいくつかは同一であり、他のものは異なります。明らかに、filecmpは、ファイルが等しいかどうかを判断するためにstatが返すすべての値を使用しません。

私の質問:実際の状況では、filecmp.cmp(file1、file2、shallow = True)は偽陽性または偽陰性を返しますか?それを信用できますか?

また、os.stat()が返す特定の値のfilecmp.cmp()で使用できる「サブ疑問」は?

(あなたは私がファイルをやっている好奇心旺盛なら、私はそれをここで議論:https://hikearizona.com/dex2/viewtopic.php?f=78&t=9538

答えて

0

比較はサイズや修正時間の属性値が同じである場合にのみ、trueを返します。 同じ正確なバイト数が同時に変更された場合にのみ誤検出を返すことができます。確認するために使用することができる

モジュールファイル参照は上述:

:CMP関数の実装(filecmp.py)(filecmp.py)の上方に利用さ

 s1 = _sig(os.stat(f1)) 
     s2 = _sig(os.stat(f2)) 
     if shallow and s1 == s2: 
      return True 

_sigのfuncionから

抜粋

def _sig(st): 
    return (stat.S_IFMT(st.st_mode), 
      st.st_size, 
      st.st_mtime) 
+0

私の質問に正確に答えました。要約すると:ファイルの種類を記述するファイルモード(st_mode)の部分**および**ファイルのサイズ(バイト数)**および**最新のコンテンツ変更の時刻(秒単位)が等しい場合、ファイルは「等しい」とみなされます。 –

関連する問題