影刀RPA 文件批量重命名与分类整理自动化 影刀RPA 文件批量重命名与分类整理自动化作者林焱什么情况用电脑用久了文件夹里乱七八糟——下载的文件没改名、照片按相机编号命名、同事发来的文件命名规则不统一。想整理又觉得几百个文件手动改太费劲。用RPA做文件整理效率惊人一键把IMG_20240626_143022.jpg改成2024-06-26_产品拍摄.jpg把PDF按日期分类到不同文件夹把文件名乱码的统一编码修正。核心场景批量文件操作——重命名、分类归档、格式转换、文件信息提取。拼多多店群自动化报活动上架怎么做第一步安全的批量重命名——先预览再执行importosimportrefromdatetimeimportdatetimefrompathlibimportPathclassFileRenamer:安全批量重命名——先预览确认后执行def__init__(self):self.plan[]# 重命名计划(原路径, 新路径)defadd_rule_replace(self,folder,old_str,new_str):规则1替换文件名中的字符串forfinos.listdir(folder):ifold_strinf:old_pathos.path.join(folder,f)new_namef.replace(old_str,new_str)new_pathos.path.join(folder,new_name)self.plan.append((old_path,new_path))defadd_rule_prefix(self,folder,prefix,sep_):规则2添加前缀forfinos.listdir(folder):old_pathos.path.join(folder,f)ifos.path.isfile(old_path):new_pathos.path.join(folder,f{prefix}{sep}{f})self.plan.append((old_path,new_path))defadd_rule_date_from_exif(self,folder): 规则3从照片EXIF信息中提取日期重命名为拍照日期 适用于手机/相机拍的照片 fromPILimportImagefromPIL.ExifTagsimportTAGSforfinos.listdir(folder):ifnotf.lower().endswith((.jpg,.jpeg,.png)):continueold_pathos.path.join(folder,f)try:imgImage.open(old_path)exifimg._getexif()ifexif:fortag_id,valueinexif.items():tag_nameTAGS.get(tag_id,tag_id)iftag_nameDateTimeOriginal:# value格式: 2024:06:26 14:30:22date_partvalue.replace(:,-)[:10]time_partvalue[11:].replace(:,)extos.path.splitext(f)[1]new_namef{date_part}_{time_part}{ext}new_pathos.path.join(folder,new_name)self.plan.append((old_path,new_path))breakexcept:passdefadd_rule_datetime(self,folder,patternr.*):规则4按文件修改时间重命名forfinos.listdir(folder):ifnotre.match(pattern,f):continueold_pathos.path.join(folder,f)mtimeos.path.getmtime(old_path)dtdatetime.fromtimestamp(mtime)extos.path.splitext(f)[1]new_namef{dt.strftime(%Y%m%d_%H%M%S)}{ext}new_pathos.path.join(folder,new_name)self.plan.append((old_path,new_path))defadd_rule_serial_number(self,folder,prefixfile,start_num1,extNone):规则5按序号重命名 file_001, file_002, ...files[fforfinos.listdir(folder)ifos.path.isfile(os.path.join(folder,f))]files.sort()fori,finenumerate(files):old_pathos.path.join(folder,f)old_extos.path.splitext(f)[1]ifextisNoneelseext new_namef{prefix}_{start_numi:03d}{old_ext}new_pathos.path.join(folder,new_name)self.plan.append((old_path,new_path))defpreview(self):预览重命名计划print(f\n 重命名预览共{len(self.plan)}个文件)forold,newinself.plan[:20]:# 只显示前20个print(f{os.path.basename(old)}→{os.path.basename(new)})iflen(self.plan)20:print(f ... 还有{len(self.plan)-20}个文件)print(f\n)defexecute(self):执行重命名ifnotself.plan:print(没有需要重命名的文件)return# 安全检查目标文件是否已存在conflicts[]forold,newinself.plan:ifos.path.exists(new)andold!new:conflicts.append((old,new))ifconflicts:print(f⚠️ 有{len(conflicts)}个文件目标名已存在请处理后再执行)forold,newinconflicts[:5]:print(f{os.path.basename(new)}已存在)returnsuccess0forold,newinself.plan:try:os.rename(old,new)success1exceptExceptionase:print(f重命名失败{old}→{e})print(f完成{success}/{len(self.plan)}个文件重命名)self.plan[]# 使用renamerFileRenamer()renamer.add_rule_replace(./downloads,副本,copy)renamer.add_rule_serial_number(./photos,prefixphoto,start_num1)renamer.preview()# renamer.execute() # 确认无误后再执行第二步智能分类归档classFileClassifier:文件分类归档# 文件类型映射TYPE_MAP{图片:[.jpg,.jpeg,.png,.gif,.bmp,.webp,.svg],文档:[.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt],压缩包:[.zip,.rar,.7z,.tar,.gz],视频:[.mp4,.avi,.mov,.mkv,.wmv],音频:[.mp3,.wav,.flac,.aac],代码:[.py,.js,.html,.css,.json,.xml,.sql],安装包:[.exe,.msi,.dmg,.apk],}classmethoddefclassify_by_type(cls,source_dir,target_dir,copyFalse):按文件类型分类到子文件夹importshutil stats{}forfinos.listdir(source_dir):src_pathos.path.join(source_dir,f)ifnotos.path.isfile(src_path):continueextos.path.splitext(f)[1].lower()# 确定分类category其他forcat_name,extensionsincls.TYPE_MAP.items():ifextinextensions:categorycat_namebreak# 目标文件夹dest_diros.path.join(target_dir,category)os.makedirs(dest_dir,exist_okTrue)dest_pathos.path.join(dest_dir,f)# 处理重名ifos.path.exists(dest_path):name,extos.path.splitext(f)dest_pathos.path.join(dest_dir,f{name}_dup{ext})ifcopy:shutil.copy2(src_path,dest_path)else:shutil.move(src_path,dest_path)stats[category]stats.get(category,0)1print(分类完成)forcat,countinstats.items():print(f{cat}:{count}个文件)classmethoddefclassify_by_date(cls,source_dir,target_dir,date_format%Y-%m):按文件修改日期分类到 年-月 文件夹importshutilforfinos.listdir(source_dir):src_pathos.path.join(source_dir,f)ifnotos.path.isfile(src_path):continuemtimeos.path.getmtime(src_path)date_folderdatetime.fromtimestamp(mtime).strftime(date_format)dest_diros.path.join(target_dir,date_folder)os.makedirs(dest_dir,exist_okTrue)shutil.move(src_path,os.path.join(dest_dir,f))print(f已按日期分类到{target_dir})第三步查找重复文件importhashlibdeffind_duplicate_files(folder,deleteFalse): 查找重复文件基于MD5哈希 hash_map{}duplicates[]forroot,dirs,filesinos.walk(folder):forfinfiles:filepathos.path.join(root,f)try:withopen(filepath,rb)asfp:file_hashhashlib.md5(fp.read()).hexdigest()file_sizeos.path.getsize(filepath)key(file_hash,file_size)# 哈希大小双重确认ifkeyinhash_map:duplicates.append({original:hash_map[key],duplicate:filepath,size_mb:file_size/(1024*1024)})else:hash_map[key]filepathexcept(IOError,PermissionError)ase:pass# 生成报告total_wastedsum(d[size_mb]fordinduplicates)print(f发现{len(duplicates)}组重复文件可释放{total_wasted:.1f}MB)returnduplicates第四步文件名编码修复从Windows传文件到Mac或者从浏览器下载文件中文文件名偶尔会乱码。deffix_filename_encoding(folder): 修复常见文件名乱码问题 例飞书文档 → 飞书文档 fixed_count0forfinos.listdir(folder):old_pathos.path.join(folder,f)# 尝试多种编码修复repairedftry:# UTF-8被当成Latin-1解码repairedf.encode(latin-1).decode(utf-8)except:try:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d541d006136e48efa7ae023cfe16fa09.png#pic_center)# GBK被当成Latin-1解码repairedf.encode(latin-1).decode(gbk)except:continueifrepaired!f:new_pathos.path.join(folder,repaired)try:os.rename(old_path,new_path)fixed_count1except:passprint(f修复了{fixed_count}个乱码文件名)有什么坑坑1重命名覆盖警告不够明显如果有两个文件会被改成同一个名字第一个改完第二个会覆盖第一个。数据就丢了。解决方法execute()之前必须preview()检查是否有冲突。冲突时自动在文件名后加序号。TEMU店群矩阵自动化运营核价报活动坑2文件被占用无法重命名文件被其他程序打开时比如Excel打开着那个文件os.rename会报PermissionError。解决方法捕获异常跳过被占用的文件最后列出跳过的文件清单。坑3超长路径问题Windows对路径长度有260字符的限制如果文件夹层级很深路径可能超长而操作失败。解决方法用\\?\\前缀启用长路径支持或者先缩短路径。坑4预览时没问题执行时秒变灾难批量重命名是个不可逆操作一旦执行错了几百个文件改回去就麻烦了。解决方法养成习惯——每次重命名前记录一个rename_log.json保存所有原路径→新路径的映射以便回滚。总结文件批量操作的铁律——先预览、后执行、留备份。os.renameshutil.move组合可以搞定90%的文件整理需求。关键是形成安全检查的习惯别自信到跳过预览直接执行。

相关新闻

最新新闻

Python爬虫技术解析:小红书无水印图片获取与处理

Python爬虫技术解析:小红书无水印图片获取与处理

1. 项目背景与核心需求小红书作为国内领先的社交电商平台,每天产生海量的UGC图片内容。这些图片通常带有平台水印,影响了二次创作和使用体验。通过Python爬虫技术获取无水印原图,主要面临三个技术挑战:反爬机制:小红书…

2026/7/18 6:19:48
电源工程师必备技能:从元器件选型到失效分析

电源工程师必备技能:从元器件选型到失效分析

1. 电源工程师的核心能力图谱电源设计这个行当,说简单也简单,无非是把电能从一种形式转换成另一种形式;说复杂也复杂,光是EMI问题就能让老工程师掉光头发。我入行十二年,带过三十多个电源项目,从手机充电器…

2026/7/18 6:19:48
Unity逻辑代码性能优化:从Profiler分析到GC规避的实战指南

Unity逻辑代码性能优化:从Profiler分析到GC规避的实战指南

1. 项目概述:为什么Unity逻辑代码优化是开发者的必修课做Unity开发这些年,我踩过最深的坑,往往不是那些炫酷的渲染效果实现不了,而是游戏跑着跑着就卡了,尤其是在中低端移动设备上。帧率(FPS)像…

2026/7/18 6:19:48
如何免费破解百度网盘限速:3分钟获取真实下载链接的终极指南

如何免费破解百度网盘限速:3分钟获取真实下载链接的终极指南

如何免费破解百度网盘限速:3分钟获取真实下载链接的终极指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘几十KB的龟速下载而烦恼吗?…

2026/7/18 6:19:48
智能测试革命:Hercules如何用AI自动化改写端到端测试实践

智能测试革命:Hercules如何用AI自动化改写端到端测试实践

智能测试革命:Hercules如何用AI自动化改写端到端测试实践 【免费下载链接】testzeus-hercules Hercules is the world’s first open-source testing agent, enabling UI, API, Security, Accessibility, and Visual validations – all without code or maintenanc…

2026/7/18 6:19:48
【AI 编程】驾驭 AI 编程:从“失控的加速”到“清醒的掌控”

【AI 编程】驾驭 AI 编程:从“失控的加速”到“清醒的掌控”

引言:AI 没有让系统变简单,它只是转移了复杂度 过去很长一段时间,我深度依赖 AI 编程。一个很真实的感受是:AI 解放了“实现力”,但无限放大了“系统失控风险”。 以前觉得“代码写出来能跑就行”,但现在…

2026/7/18 6:14:48

月新闻