影刀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%的文件整理需求。关键是形成安全检查的习惯别自信到跳过预览直接执行。

相关新闻

HarmonyOS7多行文字跑马灯实战:多文本块排布与滚动

HarmonyOS7多行文字跑马灯实战:多文本块排布与滚动

文章目录前言先看这个页面解决了什么问题页面结构速览关键状态是怎么组织的业务逻辑最值得看的函数第一段重点代码:状态与数据入口第二段重点代码:核心交互逻辑使用方法:把页面跑起来之后怎么操作这个实现为什么值得借鉴可以继续优化的地方完…

2026/7/23 7:14:04 阅读更多 →
Vue 2 迁移到 Vue 3 时的 v-model 语法不兼容 问题,警告 Extraneous non-props attributes (modelValue)

Vue 2 迁移到 Vue 3 时的 v-model 语法不兼容 问题,警告 Extraneous non-props attributes (modelValue)

[Vue warn]: Extraneous non-props attributes (modelValue) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. 这个警告的原因是 Vue 3 中 v-model 的语法变化与组件存在多根节点(Frag…

2026/7/23 11:05:36 阅读更多 →
C++并查集实现与优化:从原理到面试实战

C++并查集实现与优化:从原理到面试实战

1. 项目概述:为什么并查集是面试官的“心头好”?如果你刷过一些算法题,或者正在准备技术面试,大概率会碰到“朋友圈”、“岛屿数量”、“连通网络的操作次数”这类题目。乍一看,它们可能涉及图论、搜索,但老…

2026/7/23 11:46:28 阅读更多 →

最新新闻

尚嘉微压富氧舱以 “家电化“ 思维重塑微高压氧舱家庭康养新体验

尚嘉微压富氧舱以 “家电化“ 思维重塑微高压氧舱家庭康养新体验

对于中高层收入的老板、企业高管、 医生群体 ,以及有改善睡眠、神经性头痛、失眠调理、缓解脑疲劳、失眠、抗疲劳、术后恢复、亚健康调理、脑梗康复需求、应酬后身体修复、用脑过度修复的父母和高压力生活的人群而言 ,如何将专业的健康管理融入日常 ,一直是个难题。嘉兴尚嘉氧疗…

2026/7/23 17:57:22 阅读更多 →
汽车诊断系统总线协议规范知识汇总

汽车诊断系统总线协议规范知识汇总

OBD是什么 OBD是“车载诊断系统”,英文全称是:On-Board Diagnostic。这个系统主要用于实时监测发动机运行状态以及尾气处理系统的工作状态。如果系统有异常数据则代表系统当前工作不正常,OBD会把故障码储存起来,故障灯点亮。而修理人员可以通…

2026/7/23 17:57:22 阅读更多 →
信息管理毕业设计选题与实现指南

信息管理毕业设计选题与实现指南

1. 信息管理毕业设计选题避坑指南每年毕业季,总有一批学生卡在选题环节。作为指导过30毕业设计的过来人,我总结出信息管理类专业最容易上手的5类选题方向。这些题目不仅符合专业要求,而且资料丰富、技术成熟,特别适合想平稳过关的…

2026/7/23 17:57:22 阅读更多 →
2026届AI校招趋势与大模型技术栈解析

2026届AI校招趋势与大模型技术栈解析

1. 2026届AI校招趋势深度解读最近和几位头部大厂的HR朋友吃饭,聊到今年校招最火爆的岗位,AI方向毫无悬念地占据榜首。有个数据很有意思:某大厂算法岗的简历投递量同比暴涨300%,但HC(headcount)只增加了50%。…

2026/7/23 17:57:22 阅读更多 →
安全强化学习:原理、算法与实践应用

安全强化学习:原理、算法与实践应用

1. 安全强化学习概述在自动驾驶汽车即将撞上行人时紧急制动,在工业机械臂即将超出安全范围时自动停止,在医疗机器人进行手术时避免损伤健康组织——这些场景都离不开安全强化学习(Safe Reinforcement Learning)的核心技术。作为传…

2026/7/23 17:57:22 阅读更多 →
TM4C129时钟系统深度解析:从PLL配置到硬件设计实战

TM4C129时钟系统深度解析:从PLL配置到硬件设计实战

1. 项目概述:为什么时钟系统是嵌入式开发的基石 在嵌入式开发领域,尤其是基于ARM Cortex-M内核的微控制器项目里,时钟系统的配置往往是项目启动后第一个需要啃下的硬骨头。很多工程师拿到芯片后,习惯性地复制粘贴官方例程的初始化…

2026/7/23 17:56:22 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻