用python写一个分别查找三个目录下是否有重复的图片
时间: 2023-06-01 21:02:43 浏览: 45
以下是一个可能的解决方案:
```python
import os
import hashlib
def get_file_md5(filename):
"""获取文件的MD5值"""
m = hashlib.md5()
with open(filename, 'rb') as f:
while True:
data = f.read(1024)
if not data:
break
m.update(data)
return m.hexdigest()
def find_duplicate_images(dir1, dir2, dir3):
"""查找三个目录下是否有重复的图片"""
# 保存所有图片的MD5值及路径
md5_to_path = {}
# 查找dir1下的所有图片
for root, dirs, files in os.walk(dir1):
for filename in files:
if filename.lower().endswith('.jpg') or filename.lower().endswith('.jpeg') or filename.lower().endswith('.png'):
filepath = os.path.join(root, filename)
md5 = get_file_md5(filepath)
if md5 in md5_to_path:
print(f'Duplicate image found: {filepath} and {md5_to_path[md5]}')
else:
md5_to_path[md5] = filepath
# 查找dir2下的所有图片
for root, dirs, files in os.walk(dir2):
for filename in files:
if filename.lower().endswith('.jpg') or filename.lower().endswith('.jpeg') or filename.lower().endswith('.png'):
filepath = os.path.join(root, filename)
md5 = get_file_md5(filepath)
if md5 in md5_to_path:
print(f'Duplicate image found: {filepath} and {md5_to_path[md5]}')
else:
md5_to_path[md5] = filepath
# 查找dir3下的所有图片
for root, dirs, files in os.walk(dir3):
for filename in files:
if filename.lower().endswith('.jpg') or filename.lower().endswith('.jpeg') or filename.lower().endswith('.png'):
filepath = os.path.join(root, filename)
md5 = get_file_md5(filepath)
if md5 in md5_to_path:
print(f'Duplicate image found: {filepath} and {md5_to_path[md5]}')
else:
md5_to_path[md5] = filepath
# 测试
find_duplicate_images('/path/to/dir1', '/path/to/dir2', '/path/to/dir3')
```
这个脚本会分别查找`dir1`、`dir2`、`dir3`三个目录下的所有图片文件(后缀为`.jpg`、`.jpeg`或`.png`),并计算它们的MD5值。如果某个文件的MD5值在之前已经出现过,说明这是一个重复的图片,就会输出这个文件的路径和之前出现的路径。如果没有出现过,就将这个文件的MD5值和路径保存到`md5_to_path`字典中,以便后续查找时使用。