きゃっとぐるーぶ

忘れてもいいようにメモを取っても、メモを取ったことを忘れる男の備忘録

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入門教室

いちばんやさしい Python入門教室