Python ハッシュ - 同じ内容のファイルを見つける

ファイルが同じかどうかを比較するにはハッシュが便利です。

ハッシュはデータの並びの特徴を表した数値です。
その値が同じであれば、データが同じである確率がとても高くなります。


コード

下記のソースでは指定されたフォルダ(4行目)内に同じ内容のファイルがある場合、そのファイルを表示します。

今回は「SHA256」という種類のハッシュで計算しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os, sys, glob, hashlib
hashlist = {}
# チェックするフォルダパスを指定
path = './work'

for f in [path + '\\' + f for f in os.listdir(path)]:
data = open(f, 'rb').read()
# ファイルのハッシュを計算
h = hashlib.sha256(data).hexdigest()
if h in hashlist:
if data == open(hashlist[h], 'rb').read():
print(hashlist[h] + 'と' + f + 'は同じ')
# os.remove(f) # 重複ファイルを削除する
else:
hashlist[h] = f

13行目のコメントアウトを外すと重複したファイルを消すことができます。