You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:忽略日期前缀删除重复文件(Python实现)

解决删除重复文件的方案

你写的函数之所以没效果,核心问题是逻辑完全不对:你想通过list_files.count(file) > 1判断重复,但这些文件名因为前缀日期不同,每个都是唯一的,这个条件永远不会触发。就算逻辑能跑,也会错误删除所有包含该文件名的文件,完全不符合需求。

正确的思路是用正则提取每个文件名的核心部分,把相同核心的文件归为一组,每组只保留一个,删除其他。

具体实现代码

import os
import re

def delete_duplicate_files(target_dir):
    # 匹配文件名开头的日期时间前缀:YYYY-MM-DD HH-MM-SS - 
    pattern = re.compile(r'^\d{4}-\d{2}-\d{2} \d{2}-\d{2}-\d{2} - ')
    
    # 用字典分组:key是核心文件名,value是该组的所有文件路径
    file_groups = {}
    
    # 遍历目标目录下的所有文件
    for filename in os.listdir(target_dir):
        file_path = os.path.join(target_dir, filename)
        # 只处理文件,跳过子目录
        if not os.path.isfile(file_path):
            continue
        
        # 提取核心文件名(去掉日期前缀)
        match = pattern.match(filename)
        if match:
            core_name = filename[match.end():]
            # 将文件路径加入对应分组
            if core_name not in file_groups:
                file_groups[core_name] = []
            file_groups[core_name].append(file_path)
    
    # 处理每个分组:保留一个,删除其余
    for core_name, files in file_groups.items():
        if len(files) <= 1:
            continue  # 无重复文件,直接跳过
        
        # 按文件修改时间排序,保留最新的(要保留最早的就把reverse改成False)
        files_sorted = sorted(files, key=lambda x: os.path.getmtime(x), reverse=True)
        keep_file = files_sorted[0]
        delete_files = files_sorted[1:]
        
        print(f"核心文件名: {core_name}")
        print(f"保留文件: {os.path.basename(keep_file)}")
        for file in delete_files:
            try:
                os.remove(file)
                print(f"已删除: {os.path.basename(file)}")
            except Exception as e:
                print(f"删除失败 {os.path.basename(file)}: {str(e)}")

# 使用示例:替换成你的目标目录路径
delete_duplicate_files("/path/to/your/target/folder")

代码说明

  • 正则^\d{4}-\d{2}-\d{2} \d{2}-\d{2}-\d{2} - 精准匹配文件名开头的日期时间前缀,确保只处理符合格式的文件。
  • 用字典按核心文件名分组,保证同一核心的文件都被归类到一起。
  • 按文件修改时间排序,你可以根据需求选择保留最新或最早的文件;如果想按文件名日期排序,也可以把sorted的key改成lambda x: os.path.basename(x)。
  • 增加了异常捕获,打印删除失败的原因,方便排查问题。

注意事项

  1. 先备份目标目录的文件再测试,避免误删重要内容。
  2. 如果文件名的日期格式有变化,需要调整正则表达式来匹配。
  3. 确保脚本拥有目标目录的读写权限。

内容的提问来源于stack exchange,提问作者alex1779

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:22:44