-
Python 智能文件整理器:高效分组,轻松管理海量文件
在日常工作中,面对庞大的文件数量,整理工作往往耗时又繁琐。为此,我使用 Python 编写了一款实用的文件整理器。它能够将目录里的文件按每 1000 个整理到一个文件夹中,首先分析整个目录的文件数量,然后自动新建文件夹(如文件夹 1、文件夹 2 等),将相应数量的文件精准移动。 功能亮点 : 文件收集 :借助 os.scandir() 高效获取目录中的所有文件,精准排除子目录,确保只处理目标文件。 排序处理 :对文件名进行排序,让每次整理的结果都保持一致,方便后续查找与管理。 智能分组 :自动计算所需文件夹数量,采用向上取整的方式,还支持自定义批量大小,默认为 1000,灵活适配不同需求。 安全处理 :自动检测同名文件 / 目录,提供友好的进度提示,对于错误文件也会有明确的处理提示,保障整理过程的顺利进行。 高效移动 :利用 shutil.move() 实现文件的快速移动操作。 新版本升级 : 增强路径输入验证 :新增 get_valid_directory() 函数,支持路径中带空格的处理,自动去除路径中的引号,循环验证直到输入有效路径,还支持输入 q 退出程序,让操作更加便捷与人性化。 交互优化 :添加整理前的统计信息确认,以百分比形式显示进度条,使用三位数编号的文件夹(如 001、002...010),完成提示更加清晰,错误文件单独提示,不影响整体进度,提升用户体验。 新增功能 :运用 os.makedirs(exist_ok=True) 自动处理已存在目录,显示每个文件夹的实际移动成功率,添加程序标题和结束标识,异常处理更加完善。 显示优化 :采用符号(✓ × !)增强可读性,统计信息显示对齐,进度更新使用回车符实现原地刷新,让界面更加简洁直观。 使用方法 : 运行程序后,会立即提示输入路径,支持拖拽文件夹到命令行快速输入路径,输入路径后可查看统计信息并确认,在处理过程中会显示实时进度,每个文件夹处理完成后会显示成功统计。特别注意,此版本已支持路径中包含空格的情况,可直接拖拽包含空格的文件夹路径到命令行中使用,让你轻松告别文件整理的烦恼,大幅提升工作效率。 代码: import os import shutil from math import ceil def get_valid_directory(): """获取有效的目录路径""" while True: path = input("请输入要整理的目录路径(或输入q退出): ").strip() if path.lower() == 'q': exit() # 处理路径中的引号和空格 path = path.replace('"', '').replace("'", "") if not os.path.exists(path): print(f"× 路径不存在:{path}") continue if not os.path.isdir(path): print(f"× 这不是一个目录:{path}") continue return os.path.abspath(path) def organize_files(source_dir, batch_size=1000): try: # 获取所有文件列表(排除目录) files = [] with os.scandir(source_dir) as entries: for entry in entries: if entry.is_file(): files.append(entry.name) # 按文件名排序 files.sort() total_files = len(files) if total_files == 0: print("没有找到需要整理的文件") return # 显示统计信息 print("\n" + "="*40) print(f"目录路径:{source_dir}") print(f"文件总数:{total_files}") print(f"每个文件夹存放数量:{batch_size}") print(f"将创建 {ceil(total_files / batch_size)} 个文件夹") print("="*40 + "\n") # 用户确认 confirm = input("是否开始整理?(y/n) ").lower() if confirm != 'y': print("操作已取消") return # 创建文件夹并移动文件 for i in range(ceil(total_files / batch_size)): folder_name = os.path.join(source_dir, f"文件夹{i+1:03d}") # 使用三位数编号 # 创建文件夹(如果不存在) os.makedirs(folder_name, exist_ok=True) # 获取当前批次的文件 start = i * batch_size end = start + batch_size current_batch = files[start:end] # 移动文件并显示进度 moved = 0 for idx, filename in enumerate(current_batch, 1): src_path = os.path.join(source_dir,…- 10
- 0