如下目录下有一些图片(来自12306的验证码)
我怎么把重复的图片删除呢?当然如果不多,比如下面几张,都是人为复制出来的,扫一眼就可以手动删除了,如果有10000张这样的图片并且命名没有规则呢?如下图:
那就用Python来帮我们做吧。
思路:
如果两个文件的大小不同,那么这两个文件肯定不同,如果两个文件大小相同并且MD5也相同则我们判定为两个文件相同
# coding: utf-8
import os
import md5
def getmd5(filename):
file_txt = open(filename, 'rb').read()
m = md5.new(file_txt)
return m.hexdigest()
def main():
path = 'C:\\Users\\wu\\Desktop\\pic\\1\\'
all_size = {}
total_file = 0
total_delete = 0
for file in os.listdir(path):
total_file += 1
real_path = os.path.join(path, file)
if os.path.isfile(real_path) == True:
size = os.stat(real_path).st_size
name_and_md5 = [real_path, '']
if size in all_size.keys():
new_md5 = getmd5(real_path)
if all_size[size][1] == '':
all_size[size][1] = getmd5(all_size[size][0])
if new_md5 in all_size[size]:
os.remove(file)
print '删除', file
total_delete += 1
else:
all_size[size].append(new_md5)
else:
all_size[size] = name_and_md5
print '文件个数:', total_file
print '删除个数:', total_delete
if __name__ == '__main__':
main()
运行结果:删除的三张图是我手动复制增加的,与预期完全一样。