教你用Python寻找重复文件并删除的脚本,可以分为以下步骤:
1. 导入必要的库
我们需要用到os库和hashlib库。其中os库用于操作文件,获取路径等操作,hashlib库用于计算文件的哈希值,以判断文件是否相同。
import os
import hashlib
2. 定义函数
我们需要先定义两个函数,分别用于计算文件的哈希值和寻找重复文件。这里我们使用SHA-256算法计算哈希值,可以自由选择其他算法,如MD5等。
def sha256sum(filename):
with open(filename, "rb") as f:
data = f.read()
return hashlib.sha256(data).hexdigest()
def find_duplicates(folder):
D = {}
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
fullpath = os.path.join(dirpath, filename)
hashvalue = sha256sum(fullpath)
if hashvalue in D:
D[hashvalue].append(fullpath)
else:
D[hashvalue] = [fullpath]
return [x for x in D.values() if len(x)>1]
以上两个函数都比较简单,第一个函数接收一个文件名参数,将文件的全部数据读入内存,然后计算并返回SHA-256哈希值。第二个函数接收一个路径参数,使用os库的os.walk函数遍历路径下的所有文件,并计算它们的哈希值,将哈希值与文件路径建立映射关系,存储在一个字典中。最后筛选出字典中哈希值对应的文件列表长度大于1的条目,并返回。
3. 删除重复文件
删除重复文件最好做好备份,不然数据丢失后果自负。本例中,我们只讲解删除代码的部分。这段代码是在函数find_duplicates函数之后,将返回的相同文件清单循环遍历,每组文件中只保留一份,其他删去。
for paths in duplicates:
for i in range(1, len(paths)):
os.remove(paths[i])
print("removed", paths[i])
以上代码中,我们先遍历每一组相同文件,然后从下标1开始循环删除,即将除第一份外的文件全部删除。
示例
在代码中,我们可以设置一个测试路径。例如:
if __name__ == '__main__':
test_folder = "./test_folder"
duplicates = find_duplicates(test_folder)
for paths in duplicates:
print(paths)
delete_duplicates(duplicates)
假设我们在当前目录下创建了一个test_folder目录,并在其中添加两个文件,内容相同但文件名不同,如下:
./test_folder/file1.txt
./test_folder/file2.txt
然后运行代码。输出如下:
['./test_folder/file1.txt', './test_folder/file2.txt']
removed ./test_folder/file2.txt
输出表示找到了一组重复文件,并且已将其中一个文件删除。
另外,如果你想测试真实场景,可以使用更大的文件进行测试。例如,将多个同样的大型视频文件放置在同一文件夹中,这样就可以看到代码的实际使用情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:教你用Python寻找重复文件并删除的脚本写法 - Python技术站