当前位置:首页>python>如何利用python实现文件的自动整理归档

如何利用python实现文件的自动整理归档

  • 2026-10-29 22:19:45
如何利用python实现文件的自动整理归档
电脑使用久了以后,Download路径下会正在大量的文件,需要不断的手动整理,费时费力。
为此,我利用Python编写了一个脚本实现了文件的自动化整理
废话不多说,直接上代码:
1.导入第三方库
import osimport shutilimport datetimefrom pathlib import Path
2.定义需要整理的文件格式
# 文件类型分类字典self.file_categories = {    '图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.ico', '.webp', '.svg'],    '视频': ['.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv', '.webm', '.m4v', '.mpg', '.mpeg'],    '文档': ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.odt', '.ods', '.odp'],    '压缩文件': ['.zip', '.rar', '.7z', '.tar', '.gz', '.bz2', '.xz', '.tgz'],    '音乐': ['.mp3', '.wav', '.flac', '.aac', '.ogg', '.wma', '.m4a'],    '文本': ['.txt', '.md', '.rtf', '.csv', '.json', '.xml', '.yaml', '.yml'],    'PDF文件': ['.pdf'],    '安装包': ['.exe', '.msi', '.dmg', '.pkg', '.deb', '.rpm', '.apk'],    '电子书': ['.epub', '.mobi', '.azw3', '.fb2'],    '脚本': ['.py', '.sh', '.bat', '.ps1', '.js', '.php', '.java', '.cpp', '.c', '.html', '.css']}
大家可以更具自己的需求在这个字典里,添加文件格式或文件类型
然而,有时路径下的有些文件不应该被整理,如需系统文件或者配置文件。
3.定义需要排除的文件格式或文件名模式
# 需要排除的文件格式self.excluded_extensions = [    '.sys', '.dll', '.ini', '.cfg', '.config', '.log', '.tmp', '.temp',    '.db', '.sqlite', '.lock', '.pid', '.swp', '.swo', '.DS_Store']# 需要排除的特定文件名模式self.excluded_patterns = [    'desktop.ini', 'thumbs.db', '.gitignore', '.gitattributes',    'package-lock.json', 'yarn.lock', 'requirements.txt']
同时,为了保证电脑运行不存问题,对于不上字典或需要排除的文件,我们对其不操作。
4.定义文件扩展名识别模块
def get_file_category(self, file_extension, filename):    """    根据文件扩展名确定文件类别    Args:        file_extension (str): 文件扩展名        filename (str): 文件名    Returns:        str: 文件类别,如果不匹配则返回 None    """    # 检查是否在排除列表中    if file_extension.lower() in self.excluded_extensions:        return None    # 检查是否匹配排除的文件名模式    if filename.lower() in self.excluded_patterns:        return None    # 匹配文件类别    for category, extensions in self.file_categories.items():        if file_extension.lower() in extensions:            return category    return None
5.文件整理模块
def organize_files(self):    """    整理目标路径下的文件    """    print(f"开始整理路径: {self.target_path}")    self.log_entries.append(f"文件整理开始时间: {datetime.datetime.now()}")    self.log_entries.append(f"目标路径: {self.target_path}")    # 统计信息    stats = {        'total': 0,        'moved': 0,        'skipped': 0,        'categories': {category: 0 for category in self.file_categories.keys()}    }    try:        # 遍历目标路径下的所有文件        for item in self.target_path.iterdir():            if item.is_file():  # 只处理文件,不处理文件夹                stats['total'] += 1                filename = item.name                # 获取文件类别                category = self.get_file_category(file_extension, filename)                if category:                    # 创建分类文件夹                    category_folder = self.target_path / category                    category_folder.mkdir(exist_ok=True)                    # 构建目标文件路径                    destination = category_folder / filename                    # 处理同名文件                    if destination.exists():                        # 如果目标文件已存在,添加时间戳重命名                        timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')                        name_without_ext = item.stem                        new_filename = f"{name_without_ext}_{timestamp}{file_extension}"                        destination = category_folder / new_filename                    try:                        # 移动文件                        shutil.move(str(item), str(destination))                        stats['moved'] += 1                        stats['categories'][category] += 1                        log_message = f"[移动] {filename} -> {category}/{destination.name}"                        self.log_entries.append(log_message)                        print(log_message)                    except Exception as e:                        error_message = f"[错误] 无法移动文件 {filename}: {str(e)}"                        self.log_entries.append(error_message)                        print(error_message)                        stats['skipped'] += 1                else:                    # 不需要操作的文件                    reason = "系统/排除文件" if (file_extension.lower() in self.excluded_extensions or                                               filename.lower() in self.excluded_patterns) else "未知文件类型"                    log_message = f"[跳过] {filename} - 原因: {reason}"                    self.log_entries.append(log_message)                    print(log_message)                    stats['skipped'] += 1    except Exception as e:        error_message = f"整理过程中发生错误: {str(e)}"        self.log_entries.append(error_message)        print(error_message)    # 添加统计信息到日志    self.log_entries.append("-" * 50)    self.log_entries.append("整理统计:")    self.log_entries.append(f"总文件数: {stats['total']}")    self.log_entries.append(f"已移动文件数: {stats['moved']}")    self.log_entries.append(f"跳过文件数: {stats['skipped']}")    self.log_entries.append("")    self.log_entries.append("按类别统计:")    for category, count in stats['categories'].items():        if count > 0:            self.log_entries.append(f"  {category}: {count} 个文件")    self.log_entries.append("")    self.log_entries.append(f"文件整理结束时间: {datetime.datetime.now()}")    # 保存日志文件    self.save_log()    print(f"\n整理完成! 日志已保存到: {self.log_file}")    return stats
6.文件整理日志记录并保存
def save_log(self):    """    保存操作日志到txt文件    """    try:        with open(self.log_file, 'w', encoding='utf-8') as f:            for entry in self.log_entries:                f.write(entry + '\n')        print(f"日志文件已保存: {self.log_file}")    except Exception as e:        print(f"保存日志文件时出错: {str(e)}")
一下是运行完成后控制台输出结果:

如需要数据及源码,关注微信公众号【爱敲代码的破晓】,后台私信【20260108】

LightBGM:一个最强时间序列预测算法(附数据源码)

如何利用Python绘制高级的颜色渐变密度散点图(附数据源码)

最强时间序列预测算法:Adaboost(附数据源码)

最强聚类算法:GMM(附数据源码)

最强时间序列预测算法:LSTM(附数据源码)

ELM:一个强大的时间序列算法(附数据源码)

最强时间序列预测工具:xgboost(附数据源码)

如何利用进行SAEs、LSTM、GRU交通流量预测

如何利用Python对地震目录数据绘制M-T图

GeoPyTool:一个强大的地质开源包

如何利用python绘制岩石学图解

最新文章

随机文章