PYTHON实现智能文件分类整理工具

功能描述

这个工具可以自动扫描指定目录,根据文件扩展名、创建时间、大小等特征将文件分类整理到不同文件夹,并生成整理报告。

代码实现

import os
import shutil
from datetime import datetime
from collections import defaultdict
import hashlib

class FileOrganizer:
def init(self, target_dir):
self.target_dir = target_dir
self.file_stats = defaultdict(list)
self.duplicates = {}

def scan_directory(self):
    """扫描目录并统计文件信息"""
    for root, _, files in os.walk(self.target_dir):
        for file in files:
            file_path = os.path.join(root, file)
            if os.path.isfile(file_path):
                self._analyze_file(file_path)

def _analyze_file(self, file_path):
    """分析单个文件"""
    ext = os.path.splitext(file_path)[1].lower()
    size = os.path.getsize(file_path)
    mtime = datetime.fromtimestamp(os.path.getmtime(file_path))
    file_hash = self._get_file_hash(file_path)
    
    file_info = {
        'path': file_path,
        'size': size,
        'modified': mtime,
        'hash': file_hash

self.file_stats[ext].append(file_info)

    # 检查重复文件
    if file_hash in self.duplicates:
        self.duplicates[file_hash].append(file_path)
    else:
        self.duplicates[file_hash] = [file_path]

def _get_file_hash(self, file_path):
    """计算文件哈希值"""
    hasher = hashlib.md5()
    with open(file_path, 'rb') as f:
        while chunk := f.read(8192):
            hasher.update(chunk)
    return hasher.hexdigest()

def organize_files(self, output_dir):
    """整理文件到分类目录"""
    os.makedirs(output_dir, exist_ok=True)
    
    for ext, files in self.file_stats.items():
        if not ext:  # 无扩展名文件
            ext = 'no_extension'
        
        category_dir = os.path.join(output_dir, ext.strip('.'))
        os.makedirs(category_dir, exist_ok=True)
        
        for file in files:
            try:
                dest = os.path.join(category_dir, os.path.basename(file['path']))
                shutil.move(file['path'], dest)
            except Exception as e:
                print(f"移动文件失败: {file['path']} -> {e}")

def generate_report(self, report_file):
    """生成整理报告"""
    with open(report_file, 'w', encoding='utf-8') as f:
        f.write("= 文件分类统计 =\n")
        for ext, files in sorted(self.file_stats.items()):
            f.write(f"{ext or '无扩展名'}: {len(files)} 个文件\n")
        
        f.write("\n= 重复文件 =\n")
        for file_hash, paths in self.duplicates.items():
            if len(paths) > 1:
                f.write(f"\n哈希值: {file_hash}\n")
                for path in paths:
                    f.write(f"- {path}\n")

if name == “main”:
# 使用示例
organizer = FileOrganizer(“~/Downloads”) # 要整理的目录
organizer.scan_directory()
organizer.organize_files(“~/Documents/SortedFiles”) # 整理后存放目录
organizer.generate_report(“~/Documents/file_report.txt”)
print(“文件整理完成!”)

使用说明
修改FileOrganizer(“~/Downloads”)中的目录路径为你要整理的目录

修改organize_files()参数指定整理后的文件存放位置

运行脚本后会自动完成以下操作:

扫描目录下所有文件

按扩展名分类到不同文件夹

识别重复文件

生成整理报告

高级功能
自动跳过系统文件和隐藏文件

检测重复文件(基于MD5哈希)

支持处理无扩展名文件

生成详细的整理报告

这个工具特别适合整理下载文件夹、照片库等包含大量杂乱文件的目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值