影刀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/18 5:14:47 阅读更多 →
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/18 5:14:47 阅读更多 →
C++并查集实现与优化:从原理到面试实战

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

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

2026/7/18 5:13:47 阅读更多 →

最新新闻

3个技巧让Mac微信效率翻倍:WeChatExtension-ForMac实战指南

3个技巧让Mac微信效率翻倍:WeChatExtension-ForMac实战指南

3个技巧让Mac微信效率翻倍:WeChatExtension-ForMac实战指南 【免费下载链接】WeChatExtension-ForMac A plugin for Mac WeChat 项目地址: https://gitcode.com/gh_mirrors/we/WeChatExtension-ForMac 你是否曾为微信Mac版的限制感到困扰?消息被撤…

2026/7/18 13:31:56 阅读更多 →
电子电路中的“地”概念解析与PCB设计实践

电子电路中的“地”概念解析与PCB设计实践

1. 电子电路中的"地"究竟是什么? 在电子工程师的日常工作中,"地"(Ground)可能是最常被提及却又最容易被误解的概念。我第一次真正理解"地"的重要性,是在设计一块高速ADC采集板时——明明…

2026/7/18 13:31:56 阅读更多 →
基于MSP430F67791A的三相电表校准:从原理到工程实践

基于MSP430F67791A的三相电表校准:从原理到工程实践

1. 项目概述:高精度三相电表校准的工程实践 在电力计量领域,精度就是生命线。无论是工业产线的能耗监控,还是智能电网的精准计费,其底层都依赖于一个核心环节:电表的精确校准。你可能见过一块电表,但未必了…

2026/7/18 13:31:56 阅读更多 →
Antigravity IDE实战:用Rules和Workflows实现可编程AI工程协同

Antigravity IDE实战:用Rules和Workflows实现可编程AI工程协同

1. 项目概述:从“AI写代码”到“AI听你指挥”的质变 “再见 Cursor,Antigravity IDE 实战小技巧:让 AI 真正为你干活!”——这个标题不是情绪宣泄,而是一次工作流升级的实操宣言。过去半年,我深度切换了三套…

2026/7/18 13:31:56 阅读更多 →
DBCHM数据库文档自动化生成引擎:企业级数据库元数据管理的终极解决方案

DBCHM数据库文档自动化生成引擎:企业级数据库元数据管理的终极解决方案

DBCHM数据库文档自动化生成引擎:企业级数据库元数据管理的终极解决方案 【免费下载链接】DBCHM DBCHM修改版本,支持导出数据库字典分组 The modified version of dbchm supports exporting database dictionary groups ( chm/word/markdown/html) 项目…

2026/7/18 13:31:56 阅读更多 →
5分钟极速备份:GetQzonehistory帮你一键找回QQ空间全部历史说说的完整指南

5分钟极速备份:GetQzonehistory帮你一键找回QQ空间全部历史说说的完整指南

5分钟极速备份:GetQzonehistory帮你一键找回QQ空间全部历史说说的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过要找回QQ空间里那些被时光掩埋的青春…

2026/7/18 13:30:55 阅读更多 →

日新闻

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:38 阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:38 阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:38 阅读更多 →

周新闻

月新闻