使用 Python 查找和删除重复文件

我有几个文件夹,其中包含名称略有不同的重复文件(例如 file_abc.jpg、file_abc(1).jpg)或末尾带有“(1) 的后缀。我正在尝试开发一种相对简单的搜索方法通过文件夹,找出重复项,然后删除它们。重复项的标准是文件末尾的“(1)”,只要原始文件还存在即可。


我可以识别重复项,但是我无法以正确的格式创建文本字符串以删除它们。它需要是"C:\Data\temp\file_abc(1).jpg",但是使用下面的代码我最终得到r"C:\Data\temp''file_abc(1).jpg".


我查看了答案 [查找重复文件并删除它们,但这似乎比我需要的要复杂得多。


如果有更好(+简单)的方法来做到这一点,那么我会告诉我,但是我在 50 个奇数文件夹中总共只有大约 10,000 个文件,因此没有大量数据需要处理。


到目前为止我的代码是:


import os


file_path = r"C:\Data\temp"

file_list = os.listdir(file_path)

print (file_list)


for file in file_list:

    if ("(1)" in file):

    index_no = file_list.index(file)

    print("!! Duplicate file, number in list: "+str(file_list.index(file)))

    file_remove = ('r"%s' %file_path+"'\'"+file+'"')

    print ("The text string is: " + file_remove)

    os.remove(file_remove)


慕容森
浏览 268回答 1
1回答

呼唤远方

您的代码只是比必要的复杂一点,并且您没有应用正确的方法从路径和文件名中创建文件路径。而且我认为您不应该删除没有原始文件的文件(即虽然名称看起来像但不重复的文件)。尝试这个:for file_name in file_list:    if "(1)" not in file_name:        continue    original_file_name = file_name.replace('(1)', '')    if not os.path.exists(os.path.join(file_path, original_file_name):        continue  # do not remove files which have no original    os.remove(os.path.join(file_path, file_name))但是请注意,这对于其中多次出现的文件不能正常工作(1),并且(2)根本不会处理具有或更高数字的文件。所以我真正的提议是这样的:在给定开始下方的整个目录树中列出所有文件(用于os.walk()获取此信息),然后按大小对所有文件进行排序,然后线性遍历此列表,识别双打(此列表中的邻居)和产生每个这样的双组(即一个小的文件列表(通常只有两个),它们是相同的)。当然,您应该检查这几个文件的内容,然后确保其中的两个文件大小相同而不相同。如果您确定您有一组相同的名称,请删除除名称最简单的名称以外的所有名称(例如,没有后缀(1)等)。顺便说一下,我会调用file_path类似dir_pathor的东西root_dir_path(因为它是一个目录和一个完整的路径)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python