我有一个包含有稍微不同的名称重复的文件(如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)
您的代码只是比必要稍微复杂一些,而你没有申请一个适当的方法来创建一个文件输出路径的路径和文件名。我认为你不应该删除它们没有原始文件(即尽管他们的名字看起来这不是一式两份)。
尝试这个:
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_path
或root_dir_path
(因为它是一个目录,并给它的完整路径)。