解决方案请参阅此评论底部的EDIT。
问题:我有一个包含一堆图片的目录,如下所示:
我想找到所有重复基本名称的图像(如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)
答案 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']