我有几个文件夹,其中包含名称略有不同的重复文件(例如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,但这似乎比我需要的要复杂得多。
如果有更好的(+简单)方法可以做到这一点,那么我让我知道,但是我在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)
答案 0 :(得分: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_path
之类的dir_path
或root_dir_path
(因为它是一个目录及其完整路径)。