2012-03-01 65 views
1

這是一個出現在Python編碼競賽中的問題,並且想知道如何實現這一點。使用Python查找重複文件

問題陳述:

你(在它可能子目錄)有兩個目錄。 FAIL:如果ATLEAST一個文件名相同的內容不同

PASS:否則

,這裏是你的腳本應該由兩個根目錄

結果比較相同的文件名的內容找出重複的文件樣本圖

/dir1      /dir2 
     -- file1     -- file1 
     -- file2     -- fileA 
     -- file3     -- fileB 
     -- .... 
     -- ... 
     ---/subDir1 
      --file1 
      --file2 

file1 of dir1 contains :- foo bar 
file1 of dir2 contains :- foo 
Result - Fail 

file1 of dir1 contains :- foo bar 
file1 of dir2 contains :- foo bar 
Result - Pass. 

我試圖使用散列按文件大小,但它顯然不是辦法:)

PS:可以使用任何腳本語言。

感謝 凱利

+1

我正要解釋一種方法,但我認爲最好只是將您推薦到完整的程序http://www.ssokolow.com/scripts/fastdupes.py(我沒有寫它,但我使用了一個修改它的版本),看着它會比我試圖解釋它是如何工作的更好。 – 2012-03-01 05:09:57

回答

3

你可以在一個分層的方式解決這個問題。

  1. 通過每個目錄/子目錄,比較文件的大小。
  2. 如果文件大小是不同=>失敗
  3. 計算每個文件的SHA1哈希如果不匹配=>失敗
  4. 如果SHA1通過的文件中的內容 字節對比散列匹配做一個字節絕對肯定。
+0

你能提供一個僞代碼嗎?我按照這裏給出的帖子,但無法得到結果http://code.activestate.com/recipes/362459-dupinator-detect-and-delete-duplicate-files/ – Kelly 2012-03-01 09:43:02

1

看看標準庫中的filecmp module

當每個文件與另一個文件進行比較時,計算哈希值並不有用。必須讀取整個文件才能計算散列值,然後再次讀取以確認匹配。相比之下,直接比較可以在第一個區別時中止。