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

批量清理重复电子书:保留epub/kepub,无重复则保留原文件

解决电子书格式筛选问题:仅在重复书名时保留epub/kepub

问题说明

从Telegram下载了大量多格式电子书,需要实现以下逻辑:

  • 同一书名存在多格式副本时,仅保留epub或kepub格式文件
  • 若无重复副本,保留原格式(如PDF、MOBI等)
    原代码会直接删除所有非epub/kepub文件,不符合需求,以下是修正后的实现代码。

修正后的Python代码

import os
from collections import defaultdict

def filter_ebooks(root_dir):
    # 按书名(去掉后缀)分组存储文件路径
    book_groups = defaultdict(list)
    target_extensions = ('.epub', '.kepub.epub')  # 可根据实际kepub后缀调整

    # 遍历目录收集所有电子书文件
    for dirpath, _, filenames in os.walk(root_dir):
        for filename in filenames:
            file_path = os.path.join(dirpath, filename)
            if not os.path.isfile(file_path):
                continue
            
            # 提取不带扩展名的书名
            book_name = os.path.splitext(filename)[0]
            book_groups[book_name].append(file_path)
    
    # 处理每个书名分组
    for book_name, files in book_groups.items():
        # 检查当前分组是否有目标格式文件
        has_target = any(file.lower().endswith(target_extensions) for file in files)
        
        if has_target:
            # 有目标格式,删除非目标格式文件
            for file in files:
                if not file.lower().endswith(target_extensions):
                    try:
                        os.remove(file)
                        print(f"已删除: {file}")
                    except Exception as e:
                        print(f"删除失败 {file}: {str(e)}")
        else:
            # 无目标格式,保留所有文件
            print(f"无epub/kepub副本,保留: {book_name}")

if __name__ == "__main__":
    # 替换为你的电子书目录路径
    ebook_dir = "./your_ebook_folder"
    filter_ebooks(ebook_dir)

代码关键逻辑说明

  • 按书名分组:用defaultdict将同一书名的不同格式文件归为一组,核心是通过os.path.splitext提取不带后缀的书名
  • 目标格式匹配:默认兼容.epub和.kepub.epub后缀,若你的kepub是其他后缀(比如.kepub),直接修改target_extensions元组即可
  • 条件删除逻辑:
    • 组内存在目标格式时,仅保留epub/kepub,删除其他格式
    • 组内无目标格式时,不做任何删除操作,保留原格式文件
  • 异常防护:增加文件删除的异常捕获,避免因权限、文件占用等问题导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:58:15