为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容森 2021-11-02 18:57:05
我有几个文件夹,其中包含名称略有不同的重复文件(例如 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 osfile_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)
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

您的代码只是比必要的复杂一点,并且您没有应用正确的方法从路径和文件名中创建文件路径。而且我认为您不应该删除没有原始文件的文件(即虽然名称看起来像但不重复的文件)。


尝试这个:


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(因为它是一个目录和一个完整的路径)。


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信