下面是详细讲解如何使用Python自动清理电脑内重复文件的完整攻略。
目录
- 确认要去重的文件夹
- 遍历文件夹并计算hash
- 筛选出重复文件
- 删除重复文件
1. 确认要去重的文件夹
首先,我们需要确认要去重的文件夹路径,这可以使用Python中的os
库来实现。可以使用以下代码来获取文件夹路径:
import os
folder_path = r'C:\Users\username\Desktop\folder_name'
需要替换上述代码中的username
和folder_name
为相应的文件夹所在的用户名和文件夹名。
2. 遍历文件夹并计算hash
接下来,需要遍历文件夹里的所有文件,计算出每个文件的hash值,这里我们使用Python中的hashlib
库。可以使用以下代码来实现:
import os
import hashlib
folder_path = r'C:\Users\username\Desktop\folder_name'
file_list = os.listdir(folder_path)
file_hash_dict = {}
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
with open(file_path, 'rb') as f:
file_hash = hashlib.md5(f.read()).hexdigest()
if file_hash not in file_hash_dict:
file_hash_dict[file_hash] = [file_path]
else:
file_hash_dict[file_hash].append(file_path)
这里我们使用一个字典file_hash_dict
来存储每个文件的hash值及其对应的文件路径。如果hash值已经在字典中存在,则说明这个文件是重复文件,我们需要将这个文件的路径添加到字典对应的value中。
3. 筛选出重复文件
现在我们已经可以得到每个文件的hash值及其对应的文件路径了。我们需要筛选出重复文件,这可以使用以下代码来实现:
import os
import hashlib
folder_path = r'C:\Users\username\Desktop\folder_name'
file_list = os.listdir(folder_path)
file_hash_dict = {}
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
with open(file_path, 'rb') as f:
file_hash = hashlib.md5(f.read()).hexdigest()
if file_hash not in file_hash_dict:
file_hash_dict[file_hash] = [file_path]
else:
file_hash_dict[file_hash].append(file_path)
duplicate_files = []
for file_hash, file_paths in file_hash_dict.items():
if len(file_paths) > 1:
duplicate_files.append(file_paths)
这里我们使用一个列表duplicate_files
来存储所有重复文件的路径。
4. 删除重复文件
现在我们已经找到了重复文件的路径,我们可以把它们都删除掉,以留下唯一的文件。可以使用以下代码来实现:
import os
import hashlib
folder_path = r'C:\Users\username\Desktop\folder_name'
file_list = os.listdir(folder_path)
file_hash_dict = {}
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
with open(file_path, 'rb') as f:
file_hash = hashlib.md5(f.read()).hexdigest()
if file_hash not in file_hash_dict:
file_hash_dict[file_hash] = [file_path]
else:
file_hash_dict[file_hash].append(file_path)
duplicate_files = []
for file_hash, file_paths in file_hash_dict.items():
if len(file_paths) > 1:
duplicate_files.append(file_paths)
for file_paths in duplicate_files:
for i in range(1, len(file_paths)):
os.remove(file_paths[i])
这里我们对duplicate_files
列表中的每一个元素(也就是每组重复文件的路径)进行循环遍历,从其中删除第二个及以后的文件。
示例说明:
假设在D:\Test_Directory
文件夹中有以下4个文件:
- Test1.txt
- Test2.txt
- Test3.txt
- Test4.txt
其中Test2.txt
和Test3.txt
是重复文件,现在我们需要使用Python自动去重。我们可以使用以下代码来实现:
import os
import hashlib
folder_path = r'D:\Test_Directory'
file_list = os.listdir(folder_path)
file_hash_dict = {}
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
with open(file_path, 'rb') as f:
file_hash = hashlib.md5(f.read()).hexdigest()
if file_hash not in file_hash_dict:
file_hash_dict[file_hash] = [file_path]
else:
file_hash_dict[file_hash].append(file_path)
duplicate_files = []
for file_hash, file_paths in file_hash_dict.items():
if len(file_paths) > 1:
duplicate_files.append(file_paths)
for file_paths in duplicate_files:
for i in range(1, len(file_paths)):
os.remove(file_paths[i])
print('Done')
运行以上代码后,在D:\Test_Directory
文件夹中将只剩下以下两个文件:
- Test1.txt
- Test2.txt
其中Test2.txt
是唯一的重复文件,现在只留下了一个。
希望这份攻略可以帮助你使用Python来自动清理电脑内重复文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python自动清理电脑内重复文件,只要10行代码(自动脚本) - Python技术站