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行目のコメントアウトを外すと重複したファイルを消すことができます。

Python WatchDog - フォルダの監視を行う

特定のフォルダにファイルを置くと自動的になにか処理を行うと便利です。

例えば、ファイルを置くとそれを自動で印刷したり、メールをしたりする場合などです。

今回はWatchDogというライブラリを使って、フォルダを監視する方法をご紹介します。


手順1 ライブラリのインストール

まずは次のコマンドを実行して、WatchDogライブラリをインストールします。

1
pip install watchdog

手順2 コーディング

次の通りコーディングを行います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import time

class ChangeHandler(FileSystemEventHandler):
# すべてのイベント
def on_any_event(self, event):
print('[全て]',event)

# 作成された時のイベント
def on_created(self, event):
print('[作成]',event)

# 変更されたときのイベント
def on_modified(self, event):
print('[変更]', event)

# 削除された時のイベント
def on_deleted(self, event):
print('[削除]',event)

# 移動した時のイベント
def on_moved(self, event):
print('[移動]',event)

observer = Observer()
# 監視するフォルダを第2引数に指定
observer.schedule(ChangeHandler(), './work', recursive=True)
# 監視を開始する
observer.start()

while True:
time.sleep(5)

WatchDogでは5種類のイベントを監視できます。
メソッド内容
on_any_event全てのイベントを監視
on_created作成イベントを監視
on_deleted削除イベントを監視
on_modified変更イベントを監視
on_moved移動イベントを監視

手順3 実行結果を確認

監視フォルダにファイルを作ったり、削除したり、編集したりすると次のようにイベントを検知することができます。

(例) 実行結果


Windowsでは、ファイルを編集するとイベントが2回連続で発生するようなので注意が必要です。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×