查找并删除使用Python重复的文件

问题描述 投票:-1回答:1

我有一个包含有稍微不同的名称重复的文件(如file_abc.jpg,file_abc(1).JPG)几个文件夹,或用“(1)结束。我试图建立一个相对简单的方法来搜索后缀通过文件夹,识别重复,然后将其删除。用于重复的标准是“(1)”在文件的结尾,所以只要原始同样存在。

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

我看过的答案[Finding duplicate files and removing them,但是这似乎是远远超过我所需要的更复杂。

如果有更好的(+简单)的方法来做到这一点,然后我让我知道,但是我只有在总计约10,000个文件中的50个多文件夹,因此没有数据通过紧缩了很大的。

到目前为止我的代码是:

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)
python python-2.7 file-management data-management
1个回答
2
投票

您的代码只是比必要稍微复杂一些,而你没有申请一个适当的方法来创建一个文件输出路径的路径和文件名。我认为你不应该删除它们没有原始文件(即尽管他们的名字看起来这不是一式两份)。

尝试这个:

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

© www.soinside.com 2019 - 2024. All rights reserved.