吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 674|回复: 6
上一主题 下一主题
收起左侧

[学习记录] 论坛附件批量整理脚本 - 自动分类归档 / 智能去重 / 规范重命名

[复制链接]
跳转到指定楼层
楼主
slangzi 发表于 2026-7-28 13:56 回帖奖励

新人第一次发帖,写了个自用的小脚本分享给大家~
平时逛论坛下载的各种附件、工具包堆在文件夹里又乱又杂,很多重复文件也发现不了,手动整理太麻烦,就用 Python 写了个轻量整理脚本,纯标准库实现,不用装额外依赖,分享给有同样需求的朋友。
1. 主要功能
智能分类归档:自动识别 zip/rar/7z 等常见压缩包,根据文件名关键词自动创建分类文件夹(工具类、教程类、源码类等)。
文件去重:通过 MD5 哈希值校验,自动删除重复文件,只保留一份,节省磁盘空间。
规范重命名:自动修正文件名乱码、去除冗余字符,统一命名格式,方便后续检索。
批量处理:支持遍历子文件夹,一键整理整个目录。
安全模式:默认仅复制文件到新目录,不修改原文件,避免误删。
2. 环境要求
Python 3.8 及以上版本。
仅使用 Python 标准库,无需 pip 安装任何第三方包。
3. 完整源码

import os
import hashlib
import shutil
import re

# 配置项
SOURCE_DIR = os.getcwd()  # 默认整理当前脚本所在目录
OUTPUT_DIR = os.path.join(SOURCE_DIR, "整理结果")
FILE_TYPES = ('.zip', '.rar', '.7z', '.tar', '.gz')
CATEGORY_RULES = {
    "工具类": ["工具", "助手", "批量", "破解", "脱壳", "补丁", "注册机"],
    "教程类": ["教程", "教学", "入门", "指南", "文档", "笔记"],
    "源码类": ["源码", "源代码", "项目", "脚本", "Python", "易语言", "C++"],
    "其他": []
}

def get_file_md5(file_path):
    """计算文件MD5值"""
    md5 = hashlib.md5()
    with open(file_path, 'rb') as f:
        for chunk in iter(lambda: f.read(8192), b''):
            md5.update(chunk)
    return md5.hexdigest()

def get_category(filename):
    """根据文件名匹配分类"""
    for cate, keywords in CATEGORY_RULES.items():
        for kw in keywords:
            if kw in filename:
                return cate
    return "其他"

def clean_filename(filename):
    """规范文件名,去除冗余字符"""
    name, ext = os.path.splitext(filename)
    # 去除常见冗余前缀、多余空格和特殊字符
    name = re.sub(r'^【.*?】', '', name)
    name = re.sub(r'\s+', '_', name.strip())
    name = re.sub(r'[^\w\u4e00-\u9fa5.-]', '', name)
    return f"{name}{ext}"

def main():
    if not os.path.exists(OUTPUT_DIR):
        os.makedirs(OUTPUT_DIR)

    md5_record = {}
    total_count = 0
    dup_count = 0

    for root, _, files in os.walk(SOURCE_DIR):
        # 跳过输出目录,避免循环处理
        if OUTPUT_DIR in root:
            continue

        for file in files:
            if not file.lower().endswith(FILE_TYPES):
                continue

            src_path = os.path.join(root, file)
            total_count += 1

            # 计算MD5去重
            file_md5 = get_file_md5(src_path)
            if file_md5 in md5_record:
                dup_count += 1
                continue
            md5_record[file_md5] = file

            # 确定分类和新文件名
            category = get_category(file)
            new_name = clean_filename(file)
            cate_dir = os.path.join(OUTPUT_DIR, category)
            if not os.path.exists(cate_dir):
                os.makedirs(cate_dir)

            # 处理重名
            dst_path = os.path.join(cate_dir, new_name)
            counter = 1
            while os.path.exists(dst_path):
                name, ext = os.path.splitext(new_name)
                dst_path = os.path.join(cate_dir, f"{name}_{counter}{ext}")
                counter += 1

            shutil.copy2(src_path, dst_path)

    print(f"处理完成!")
    print(f"总文件数:{total_count}")
    print(f"重复文件数:{dup_count}")
    print(f"已整理文件数:{total_count - dup_count}")
    print(f"整理结果已保存到:{OUTPUT_DIR}")

if __name__ == "__main__":
    main()

4. 使用方法

  1. 把上面的代码复制保存为 整理附件.py。
  2. 将脚本放到你存放论坛附件的文件夹里。
  3. 双击运行(或命令行执行 python 整理附件.py)。
  4. 脚本会自动在当前目录生成「整理结果」文件夹,分类好的文件都在里面。

5. 注意事项

  1. 脚本默认是复制模式,原文件不会动,放心使用。
  2. 大文件较多时计算 MD5 会稍慢,属于正常情况。
  3. 分类规则可以自己在代码里修改关键词,适配自己的文件习惯。

第一次写分享帖,代码写得比较简单,有什么问题或者改进建议欢迎大家指出~感谢论坛提供的学习平台,以后也会多分享自己写的小东西,和大家一起交流进步。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Iamx688110 发表于 2026-7-28 20:34
居然有易语言...可以可以
3#
magiclyan 发表于 2026-7-28 21:04
Iamx688110 发表于 2026-7-28 20:34
居然有易语言...可以可以
Python 3.8 及以上版本。
仅使用 Python 标准库,无需 pip 安装任何第三方包。


明明是标准PY语法哪来的易语言?
4#
magiclyan 发表于 2026-7-28 21:08
默认仅复制文件到新目录,不修改原文件,避免误删。


仅复制依旧会产生大量重复冗余文件,如果有可能建议改为“硬链接”(目前我在用的)归档方式
5#
Iamx688110 发表于 2026-7-29 11:10
"源码类": ["源码", "源代码", "项目", "脚本", "Python", "易语言", "C++"],

这个啊,分得这么详细
6#
wufashihu 发表于 2026-7-29 16:41
readme.txt (57 Bytes, 下载次数: 0)

已经打包好了,两个下载方式:
下载:https://wwaye.lanzoue.com/ijEhl3zetp6d 密码:2bhd
7#
henrylu09 发表于 2026-7-31 09:42
我有很多照片,需要去重,这个不知道能不能用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-25 13:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表