【发布时间】:2019-02-08 13:10:18
【问题描述】:
我有几个文件夹,其中包含名称略有不同的重复文件(例如 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)
【问题讨论】:
-
使用
os.path.join -
如果文件包含 (1),为什么不只是
os.remove(os.path.join(file_path,file)?为什么索引和所有??? -
'r"%s' %file_path+"'\'"+file+'"'在文件路径中嵌入原始前缀 ... -
我建议列出所有文件(使用
os.walk()得到这个),然后按大小对所有文件进行排序,然后线性遍历这个列表,识别双打(在这个列表)和yield每个这样的双组(即一个小的文件列表(通常只有两个),它们是相同的)。当然,您应该检查这几个文件的内容,然后确保不只是其中两个意外地大小相同而不相同。如果您确定您有一组相同的名称,请删除名称最简单的名称(例如带有后缀(1)等)。
标签: python python-2.7 file-management data-management