功能描述
这个工具可以自动扫描指定目录,根据文件扩展名、创建时间、大小等特征将文件分类整理到不同文件夹,并生成整理报告。
代码实现
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哈希)
支持处理无扩展名文件
生成详细的整理报告
这个工具特别适合整理下载文件夹、照片库等包含大量杂乱文件的目录。

300

被折叠的 条评论
为什么被折叠?



