如何使用 Python 实现删除重复文件?
1. 查找重复文件
使用Python可以很方便地查找重复文件。其中,可以使用hashlib模块计算文件的哈希值,来判断是否为同一个文件。最简单的实现步骤如下所示。
- 遍历所需要查找的目录,找出其中所有的文件。
- 对于每一个文件,计算文件的哈希值。
- 如果哈希值等于目录中的其他某个文件的哈希值,则这两个文件为重复文件。
- 将重复文件存储在一个列表中,以备删除。
下面是一个查找重复文件功能的示例代码:
import os
import hashlib
# 获取指定目录下所有文件的路径
def get_files_list(path):
files_list = []
for root, dirs, files in os.walk(path):
for name in files:
files_list.append(os.path.join(root, name))
return files_list
# 计算文件的哈希值
def get_file_md5(file_path):
with open(file_path, 'rb') as f:
md5obj = hashlib.md5()
while True:
data = f.read(1024)
if not data:
break
md5obj.update(data)
return md5obj.hexdigest()
def find_duplicate_files(path):
file_md5_dict = {}
duplicate_files = []
files_list = get_files_list(path)
for file_path in files_list:
file_md5 = get_file_md5(file_path)
if file_md5 in file_md5_dict:
duplicate_files.append(file_path)
else:
file_md5_dict[file_md5] = file_path
return duplicate_files
2. 删除重复文件
当找到重复文件后,我们就可以将重复文件删除。其中,删除文件可以使用Python自带的os库的os.remove
方法。当然,在删除文件时,需要用户确认删除的操作,可以使用input
实现。下面是删除重复文件的示例代码:
import os
import hashlib
# 获取指定目录下所有文件的路径
def get_files_list(path):
files_list = []
for root, dirs, files in os.walk(path):
for name in files:
files_list.append(os.path.join(root, name))
return files_list
# 计算文件的哈希值
def get_file_md5(file_path):
with open(file_path, 'rb') as f:
md5obj = hashlib.md5()
while True:
data = f.read(1024)
if not data:
break
md5obj.update(data)
return md5obj.hexdigest()
def delete_duplicate_files(path):
file_md5_dict = {}
files_list = get_files_list(path)
for file_path in files_list:
file_md5 = get_file_md5(file_path)
if file_md5 in file_md5_dict:
delete_confirm = input(f"确认删除文件{file_path}吗?(Y/N)")
if delete_confirm.lower() == 'y':
os.remove(file_path)
print(f"文件{file_path}删除成功!")
else:
print(f"文件{file_path}未删除!")
else:
file_md5_dict[file_md5] = file_path
示例
现在,假设我们在D:\test
目录下有以下文件:
- D:\test\file1.txt
- D:\test\file2.txt(重复文件1)
- D:\test\file3.txt
- D:\test\another\file4.txt
- D:\test\another\file5.txt(重复文件2)
我们可以使用以下代码进行查找并删除重复文件:
path = "D:\test"
duplicate_files = find_duplicate_files(path)
print(f"重复文件有:{duplicate_files}")
delete_duplicate_files(path)
运行结果为:
重复文件有:['D:\\test\\file2.txt', 'D:\\test\\another\\file5.txt']
确认删除文件D:\test\file2.txt吗?(Y/N)y
文件D:\test\file2.txt删除成功!
确认删除文件D:\test\another\file5.txt吗?(Y/N)n
文件D:\test\another\file5.txt未删除!
可以看到,程序正确地找到了两个重复文件,并删除了其中的一个。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解如何使用Python实现删除重复文件 - Python技术站