Pythonで重複ファイルを削除したい
プログラミングはたくさんコードを書いていくのが一番の学習なんだそうだ。
ちなみに、私のプログラミングのスキルは初学者に毛が生えた程度。(ハゲの話はしてない)
正直、プログラミングをする動機は私にない。作りたいものがない。 だから、シェルスクリプトのかわりにPythonを使ってちょっとしたツールを作ってる。
その一環でディレクトリ内に重複したファイルをリストアップ、そして削除するコードを書いてみた。 このぐらいのコードならすらすらと書けるようになってきた。 そろそろ機能をいくつかつけて、それなりに使えそうなものを作ってみたい。
Pythonで重複したファイルを削除する
-r をつけると確認せずに削除します。
from pathlib import Path from argparse import ArgumentParser import hashlib import os dup_list = [] parser = ArgumentParser() parser.add_argument('arg', type=str) parser.add_argument('-r', '--remove', action='store_true') args = parser.parse_args() p = Path(args.arg) def checkhash(arg): f = open(arg, 'rb') data = f.read() f.close() sha1 = hashlib.sha1(data).hexdigest() return sha1 def show_dup_files(arg): msg = f'Duplicate File: {arg}' print(msg) def dup_file_remove(): for f in dup_list: msg = f'Remove: {f}' os.remove(f) print(msg) files_sha1 = [(f,checkhash(f)) for f in p.rglob('*') if f.is_file()] files_sha1 = sorted(files_sha1, key=lambda x:x[1]) for i in range(len(files_sha1)): temp_a, temp_b = files_sha1[i - 1] fname, sha1 = files_sha1[i] if sha1 == temp_b: show_dup_files(fname) dup_list.append(fname) else: continue if args.remove: dup_file_remove()
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
- 作者: 大澤文孝
- 出版社/メーカー: ソーテック社
- 発売日: 2017/04/08
- メディア: 単行本
- この商品を含むブログを見る