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

标签 python duplicates

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

问题:我有一个包含一堆图像的目录,其命名如下:

  • 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 方式来手动浏览。

我很难找到要使用的示例脚本,我找到的所有脚本都在检查哈希或其他内容,我认为这没有用,因为图像确实相似,但不相同。

干杯

编辑: 感谢 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)

最佳答案

给定:

>>> 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 形式,您可以首先使用它来创建一组文件名前 8 个字母的 .nef 文件:

>>> 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']

关于python - 使用python查找具有不同扩展名的重复文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450471/

相关文章:

python - PIL - 提交的文件为空测试用例

python - 如何使用 PyTorch 修剪/移除张量的一部分以匹配另一个张量的形状?

python - Python 中的快速 http 查询

python - 根据多数规则删除重复项

sql - 将 ID 添加到两列中的重复项

python - 使用 python 将查询结果打印到管道分隔文件

iOS 蓝牙状态保存和恢复的重复问题 -25299

Bash 基于单个字段排序并基于另一个字段进行比较

linux - 使用 awk 删除重复文件时出现问题

Python - 如何计算列表中的特定部分