使用python查找具有不同扩展名的重复文件

时间:2017-06-09 06:10:32

标签: python duplicates

解决方案请参阅此评论底部的EDIT。

问题:我有一个包含一堆图片的目录,如下所示:

  • image001.nef
  • image002.nef
  • image003.nef
  • image003 - 20170609.jpg
  • image004.nef
  • image005.nef
  • image006 - 20170609.nef
  • image007.nef
  • image007 - 20170609.jpg
  • image008.jpg
  • image008 - 20170609.nef

我想找到所有重复基本名称的图像(如imageXXX),扩展名为JPG

因此,从上面的列表中,只有三个项目符合要删除的条件(我有粗体那些项目)。

我有2,500张图像,因此我需要手动进行pythonic方式。

我很难找到一个可以使用的示例脚本,我发现的所有脚本都在检查HASH或其他东西,我不相信它是有用的,因为图像确实相似但不完全相同。

干杯

编辑: 感谢dawg我能够得到我想要的输出......这是最终的代码对我有用:

import os

directory = r'C:\temp'
out_directory = r'C:\temp\temp_usa_photos'
fns = os.listdir(directory)


ref_nef = {fn[0:15] for fn in fns if fn.upper().endswith('.NEF')}

print ref_nef

out_list = filter(lambda e: e[0:15] in ref_nef, [fn for fn in fns if fn.upper().endswith('.JPG')])

print out_list

for f in out_list:
    input_file = os.path.join(directory, f)
    output_file = os.path.join(out_directory, f)
    os.rename(input_file, output_file)

1 个答案:

答案 0 :(得分:1)

假设:

>>> fns
['image001.nef', 'image002.nef', 'image003.nef', 'image003 - 20170609.jpg', 'image004.nef', 'image005.nef', 'image006 - 20170609.nef', 'image007.nef', 'image007 - 20170609.jpg', 'image008.jpg', 'image008 - 20170609.nef']

(我可以使用该列表作为文件名列表的代理。只需使用glob或listdir作为文件......)

如果您的文件名都是imageXXX的格式,您可以先使用它来创建一组文件名,这些文件名是.nef个文件的前8个字母:

>>> ref_nef={fn[0:8] for fn in fns if fn.upper().endswith('.NEF')}
>>> ref_nef
set(['image008', 'image005', 'image004', 'image007', 'image006', 'image001', 'image003', 'image002'])

然后使用它来过滤要删除的.jpg个文件:

>>> filter(lambda e: e[0:8] in ref_nef, [fn for fn in fns if fn.upper().endswith('.JPG')])
['image003 - 20170609.jpg', 'image007 - 20170609.jpg', 'image008.jpg']