影刀RPA新手教程:文件与文件夹操作实战——批量重命名读写与路径处理
有次帮客户采集商品图片,一天下来2000多张,全堆在一个文件夹里,文件名是一串随机字符——IMG_20241123_145632.jpg这种。客户说要按日期+商品名分类,当时我就蒙了。手动整理了一整天,第二天才想到用影刀自动化。从那以后,文件操作成了我最常用的技能之一。
这篇文章用批量整理采集图片做主线,串起文件读写、文件夹操作、批量重命名、路径处理所有知识点。
1. 认识影刀/安装
影刀安装后建议先把文件操作相关的指令浏览一遍,都在指令库的"文件"分类下。常用的就那几个:文件读写、文件重命名、文件删除、文件夹创建、获取文件路径信息。
新手注意:影刀用的是自己的文件操作指令,不走系统cmd命令。虽然也能嵌入Python做文件操作,但简单场景直接用影刀指令更直观。
2. 元素定位(四合一)
文件操作开始前,数据从哪来?从网页来。所以要先学会定位。
F12→Elements面板→Ctrl+F输入XPath测试。六个常用XPath:
//div[@class='product-img']/img——图片元素定位//span[contains(text(),'价格')]/following-sibling::span——价格元素(同级后面那个span)//img[contains(@src,'.jpg')]——所有jpg图片//div[@id='gallery']//img——图库下所有图片//*[contains(@class,'title') and text()]——有文本的标题元素//a[contains(@href,'item')][1]——第一个商品链接
CSS选择器取图片:img[src$=".jpg"](以.jpg结尾的img),div.main-img > img:first-child(第一张主图)。
正则表达式在文件名处理里特别有用。提取日期:(\d{8})八位数字匹配年月日。提取商品ID:id=(\d+)。提取图片序号:_\d+\.jpg。
3. 变量与数据类型
文件操作核心变量类型:
字符串——文件路径都是字符串。拼接路径用+或os.path.join(),后者自动处理分隔符。
列表——批量操作时,先把所有文件路径收集到一个列表,再循环处理。采集图片URL列表→循环下载→下载完收集本地路径列表→批量重命名。这个流程我跑了上千次。
字典——文件信息结构化存储:{"原文件名": "IMG_001.jpg", "新文件名": "商品A_主图_001.jpg", "大小": 123456, "日期": "20241123"}。
JSON——复杂文件配置存JSON。采集任务的配置文件:{"保存路径": "D:/商品图片/", "图片前缀": "商品名_", "按日期分文件夹": true}。Python块里json.loads()读取→修改→json.dumps()保存。
4. 流程控制
ForEach列表循环——遍历已下载的文件列表,逐个处理。这个最常用。
For次数循环——已知文件数量时用。比如已经拿到了100个文件路径的列表,ForEach就够了。
While条件循环——监听文件夹变化。有新文件进来就处理,没有就等待。
If条件判断——每个文件操作前判断文件/文件夹是否存在,防止报错。
Try-Catch——文件操作最容易出错:文件被占用、路径不存在、权限不够。每个文件操作都包Try-Catch。
5. 网页自动化——图片批量下载
采集商品图片的完整流程:
- 打开商品详情页
- 等待图片加载(等待相似元素出现)
- 获取所有图片元素的src属性
- 循环下载每张图片
等图片加载有个坑:有的网站图片是懒加载的,只有滚动到可见区域才加载。解决:先scrollTo(0, scrollHeight)滚动到底部,等2秒,再抓img的src。
图片URL可能是相对路径://img.alicdn.com/xxx.jpg。下载前要拼接完整的URL前缀。这个我排查了一下午——图片下载指令报了404,后来F12发现src是双斜杠开头的,需要拼https:。
翻页采集多商品时,每翻一页把当页图片都下了,按商品分文件夹。
iframe处理——有的商品图片在iframe里展示(天猫国际、跨境店),要先切换iframe再定位图片元素。
6. 数据处理
文件读写三种格式:
TXT——最简单,直接"读取文件"选文本格式。采集日志、错误记录用TXT。注意编码选UTF-8,不然中文乱码。写入文件时可以选"覆盖写入"或"追加写入",追加写入还能选新行追加。
CSV——轻量表格格式。影刀有专门的CSV读写指令,也可以用Python的csv库。批量写入时先攒数据到列表,一次性写入,比一行写一次快十几倍。
JSON——结构化数据存JSON。影刀里用Python块的json库:import json,json.loads(json字符串)转对象,json.dumps(对象, ensure_ascii=False)保证中文不乱码。
文本清洗——网页采集回来的文本大概率带空格换行符:strip()去两端空格,replace('\n', '')去换行,replace('¥', '')去货币符号。
7. 鼠标键盘图像自动化
批量整理文件时,有些操作需要模拟鼠标键盘:
模拟文件拖拽——某些软件必须通过拖拽方式导入文件。影刀用拖拽指令:指定起始坐标和终点坐标,模拟鼠标左键按下→移动→释放。
图像识别辅助——文件另存为对话框里,"保存"按钮可能不是标准Windows控件。用图像识别:截图保存按钮→wait_appear→click。
8. 进阶技能
Python做文件操作比影刀原生指令更灵活。常用库:
os库——路径处理、文件遍历、文件夹操作。os.listdir(路径)列出所有文件,os.path.exists(路径)判断是否存在,os.makedirs(路径)递归创建文件夹。
shutil库——文件复制移动。shutil.copy(源路径, 目标路径)复制文件,shutil.move(源路径, 目标路径)移动文件,shutil.rmtree(路径)删除文件夹。
我的Python文件操作模板:
importosimportshutil# 获取图片文件夹source_dir=package.variables['图片文件夹']# 创建按日期分类的文件夹date_folder=os.path.join(source_dir,'20241123')ifnotos.path.exists(date_folder):os.makedirs(date_folder)# 批量移动文件forfileinos.listdir(source_dir):iffile.endswith('.jpg'):shutil.move(os.path.join(source_dir,file),os.path.join(date_folder,file))Python块引用全局变量必须是package.variables['变量名']格式,我一开始直接写变量名报了半天错。
9. 平台实战:淘宝商品图片采集 + 小红书笔记图片采集
淘宝图片整理:
淘宝商品主图的URL规律:https://img.alicdn.com/xxx.jpg或//img.alicdn.com/xxx.jpg。相对路径需要拼接https:。批量下载后按商品ID分文件夹。
流程:
- 采集列表页,获取商品ID和标题
- 进入每个商品详情页
- 获取所有图片URL
- 按
商品ID_序号.jpg格式下载到D:/商品图片/商品ID/文件夹 - 记录下载结果到CSV
小红书笔记图片整理:
小红书笔记的图片没有清晰的文件名,下载下来全是随机字符串。需要按照笔记标题+发布时间重命名。
流程:
- 采集笔记标题和发布时间
- 循环下载该笔记的图片到临时文件夹
- 批量重命名:
笔记标题_发布时间_序号.jpg - 按日期移动到归档文件夹
文件重命名的核心:用"获取文件路径信息"指令,先拿到原文件的基本文件名和扩展名,然后拼接新文件名,最后执行"文件重命名"。
10. 系统联动
整理完文件后自动通知:
飞书消息通知——整理完成发送消息"今日共整理商品XX个,图片XX张,已归档至XX文件夹"。用飞书机器人webhook。整理失败也发一条异常消息。
邮件发送——整理结果表格CSV作为附件发送给客户。QQ邮箱SMTP配置:smtp.qq.com,端口587,需要开启POP3/SMTP服务获取授权码。
定时任务——设置每天凌晨2点自动整理前一天的图片。影刀客户端自带定时执行功能。
11. 工程化与规范
文件操作六大原则:
- 操作前先判断文件/文件夹是否存在——用if判断,不存在就创建或跳过
- 路径用os.path.join拼接——不用字符串硬拼"路径+\文件名",Windows和Mac的分隔符不同
- 文件名不要含特殊字符——冒号、问号、星号、尖括号在Windows文件名里非法
- 批量操作先存列表再执行——不要边读边写,容易冲突
- 每个文件操作包Try-Catch——单个文件操作失败不影响整体
- 大文件分批处理——文件数量上万时,每500个处理一批释放内存
路径处理的坑:
Windows反斜杠vs正斜杠——影刀指令接收路径时用正斜杠或双反斜杠都行,但用了单反斜杠就会出问题,因为\n、\t被识别为转义字符。统一用正斜杠最省事。
中文路径——中文路径理论上没问题,但有些老旧系统接口不支持。尽量用英文路径。
路径不存在——用os.path.exists()先判断。创建文件夹用os.makedirs(路径, exist_ok=True),父目录不存在自动创建。
获取文件路径信息的指令返回五个字段:根目录、父目录、文件名、基本文件名、文件扩展名。基本文件名是不含扩展名的部分,扩展名含点号。我常用它来提取基本文件名→拼接新名称→重命名。
子流程封装——把文件操作封装成独立子流程,主流程调用。比如"图片归档子流程"输入源文件夹和目标文件夹,"批量重命名子流程"输入文件夹路径和命名规则。
命名规范——文件夹名用日期+项目名(20241123_淘宝采集),文件名用商品名+序号+类型(商品A_主图_001.jpg)。一看就知道是什么。
12. 速查表/常见报错
文件读写报错"文件不存在"
原因:路径错误或文件已被移动
解决:操作前先os.path.exists()判断
写入文件中文乱码
原因:编码不对
解决:编码选UTF-8,Python写文件时指定encoding='utf-8'
文件重命名报错"文件被占用"
原因:文件正在被其他程序打开
解决:关闭打开该文件的程序后再操作
文件路径报错
原因:下载/上传文件指令路径输入方式问题
解决:检查输入的路径是否有效,改用"模拟人工输入"或"剪切板输入"
文件名超长报错
原因:Windows路径最长260个字符
解决:缩短文件夹名,减少层级,用Python的\\?\前缀绕过限制
删除文件夹失败
原因:文件夹非空
解决:用Python的shutil.rmtree(路径)递归删除
批量重命名序号错乱
原因:循环中用了原序号而非新序号
解决:用列表收集新路径,统一执行重命名
路径拼接错误
原因:多了或少了一个分隔符
解决:用os.path.join()代替字符串拼接
下载文件没有扩展名
原因:Chrome设置为不询问直接下载、未加扩展名或本机未开启显示扩展名
解决:Chrome设置→下载内容→开启下载前询问每个文件的保存位置
图片下载404
原因:URL是相对路径
解决:F12看完整URL,拼接缺失的协议和域名
整理脚本模板:
1. 获取源文件夹路径 2. 列出文件夹内所有文件 3. 循环每个文件: 判断扩展名→按规则分类→移动到对应文件夹→重命名 4. 输出整理结果影刀文件操作更详细的教程可以去 home.linyan.cloud 看,那里有从入门到高级的完整教程。
#影刀RPA #RPA教程 #新手入门 #文件操作 #批量重命名 #文件夹整理
作者:林焱