影刀RPA避坑指南:文件批量处理与Excel合并的7个实用操作

做RPA采集,除了抓数据,还有一块绕不开的工作——处理文件。图片批量下载、文件改名归档、多个Excel合并、数据分类整理……这些活虽然不复杂,但手动做起来极其枯燥,而且容易出错

我以前帮人做一个商品采集项目,每天要下载几千张图片,还要按商品编号重命名、分到不同文件夹。刚开始手工操作了三天就受不了了,后来用影刀的文件处理指令写了几个小流程,每天的工作量从2小时压缩到了10分钟

picture.image

这篇文章不讲采集,就讲7个我在实际项目中每天都在用的文件批量操作,全部有可以直接参考的代码和参数配置。


picture.image

文件处理的三类常用指令

影刀RPA里文件操作相关的指令集中在**"文件与文件夹"**分类下,常用的分三类:

picture.image

类别核心指令主要用途
文件操作复制文件、移动文件、删除文件、重命名文件整理单个文件
文件夹操作创建文件夹、删除文件夹、获取文件夹内文件列表目录管理
批量处理循环列表 + 上述指令组合批量改名/移动/分类

picture.image

核心逻辑:先"获取文件夹内文件列表",再"循环"处理每个文件。 这个模式可以覆盖90%的批量文件处理需求。


picture.image

操作一:批量重命名文件

场景: 下载的图片文件名是IMG_8374.jpgIMG_8375.jpg,需要改成商品编号命名,如SP001_主图.jpgSP001_详情1.jpg


![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/69478e69852b417ba0337df78475356e~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783911443&x-signature=RziPo6mJinuyTQVe8O0xmttSEk0%3D)
# 指令序列:
# 1. 获取文件夹内文件列表 → 存入「文件列表」
# 2. 循环列表(文件列表) + 内部用「重命名文件」

# ===== 重命名文件指令参数 =====

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/0cb767b0dceb4f308ee632f297b4292b~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783911443&x-signature=lOl%2B9dqov0ye3wOo9c46bOcq4GI%3D)
# 指令:重命名文件
# 原文件路径:C:\images\IMG_8374.jpg
# 新文件名:SP001_主图.jpg
# 说明:只改文件名,不改文件内容

picture.image

批量重命名的完整流程:

# 假设你有一个「商品编号列表」和「下载的文件列表」
# 它们是一一对应的

获取文件夹内文件列表("C:\downloads\原始图片") → 存入「原始文件列表」
# 假设返回:["IMG_001.jpg", "IMG_002.jpg", "IMG_003.jpg"]

新文件名列表 = ["SP001_主图.jpg", "SP001_详情1.jpg", "SP001_详情2.jpg"]

循环次数 = 列表长度(原始文件列表)
循环 循环次数 次:
    当前原始文件 = 原始文件列表[当前循环索引]
    当前新文件名 = 新文件名列表[当前循环索引]
    
    重命名文件(
        原文件路径="C:\downloads\原始图片\" + 当前原始文件,
        新文件名=当前新文件名
    )
    输出日志("已重命名:" + 当前原始文件 + "" + 当前新文件名)

容易踩坑:

  • 重命名时不要改文件扩展名(除非你明确知道要改格式),改了文件可能打不开
  • 如果有同名文件,重命名会报错或覆盖(取决于系统设置),建议先检查目标文件名是否已存在

picture.image

  • 文件路径中的\在影刀里要写成\\,或者在路径外面加引号

操作二:按规则自动分类到不同文件夹

场景: 采集下来的商品图片需要按"类目"分到不同文件夹:女装/男装/配饰/

# 1. 创建目标文件夹(如果不存在)
创建文件夹("C:\images\分类\女装")
创建文件夹("C:\images\分类\男装")
创建文件夹("C:\images\分类\配饰")

# 2. 获取所有待分类文件
获取文件夹内文件列表("C:\images\待分类") → 存入「待处理文件列表」

# 3. 循环每个文件,根据文件名或规则分类
循环列表(待处理文件列表):
    当前文件 = 当前循环项
    
    # 假设文件名包含类目关键词
    如果 包含文本(当前文件, "女装"):
        目标文件夹 = "C:\images\分类\女装"
    否则如果 包含文本(当前文件, "男装"):
        目标文件夹 = "C:\images\分类\男装"
    否则:
        目标文件夹 = "C:\images\分类\其他"
        
![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/f4170801c36443419e4ddd524c9161ab~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783911443&x-signature=ag435UtKDfnyfDcBpjdnSu5VCj4%3D)
    
    # 移动文件到目标文件夹
    移动文件(
        原路径="C:\images\待分类\" + 当前文件,
        目标路径=目标文件夹 + "\" + 当前文件
    )
    输出日志("已移动:" + 当前文件 + "" + 目标文件夹)

用"正则表达式"做更精确的分类:

如果分类规则比较复杂(比如按价格区间、日期范围),可以在"执行Python代码"里用正则匹配,返回分类结果给影刀指令。

# 执行Python代码:根据文件名判断类目
# 输入:filename(文本)
# 输出:category(文本)

import re

def get_category(filename):
    if re.search(r'女装|连衣裙|裙子', filename):
        return '女装'
    elif re.search(r'男装|衬衫|裤子', filename):
        return '男装'
    elif re.search(r'项链|耳环|手链', filename):
        return '配饰'
    else:
        return '其他'

category = get_category(filename)

操作三:批量合并多个Excel文件

场景: 每天采集多个店铺的数据,每个店铺一个Excel文件,需要合并成一个总表。

# ===== 方案:用Python Pandas批量合并 =====
# 执行Python代码:合并文件夹内所有Excel文件
# 输入:folder_path(文本)
# 输出:merged_data(二维列表)

import pandas as pd
import os

def merge_excel_files(folder_path):
    all_files = os.listdir(folder_path)
    excel_files = [f for f in all_files if f.endswith(('.xlsx', '.xls'))]
    
    if not excel_files:
        return []
    
    merged_df = pd.DataFrame()
    
    for file in excel_files:
        file_path = os.path.join(folder_path, file)
        try:
            df = pd.read_excel(file_path)
            # 加一列"来源文件",方便追溯数据来源
            df['来源文件'] = file
            merged_df = pd.concat([merged_df, df], ignore_index=True)
        except Exception as e:
            print(f"读取文件 {file} 失败:{e}")
    
    # 去重(按"商品标题"去重)
    if '商品标题' in merged_df.columns:
        merged_df = merged_df.drop_duplicates(subset=['商品标题'], keep='first')
    
    # 转为二维列表(包含表头)
    result = [merged_df.columns.tolist()] + merged_df.values.tolist()
    return result

merged_data = merge_excel_files("C:\\data\\每日采集\\2026-07-06")

在影刀里怎么接:

  1. 把Python代码贴在"执行Python代码"指令里
  2. 输入变量folder_path绑影刀里的文件夹路径变量
  3. 输出变量merged_data绑定一个新变量
  4. 用"写入表格数据"把merged_data写入总表

容易踩坑:

  • 所有待合并的Excel表头必须一致,否则合并后列会乱
  • 如果Excel里有公式,pd.read_excel读取的是计算后的值,不是公式本身
  • 超大文件(单文件超过50MB)合并可能会慢,建议分批处理

操作四:批量下载网页图片

场景: 采集商品数据时,需要把商品主图下载到本地。

# ===== 核心指令:下载文件 =====
# 指令:下载文件
# 参数:
#   URL:https://img.pdd.com/xxx.jpg
#   保存路径:C:\images\商品_001.jpg
#   超时时间:30秒

# ===== 在采集循环中下载图片 =====
循环列表(商品数据列表):
    当前商品 = 当前循环项
    图片URL = 当前商品["图片链接"]
    商品编号 = 当前商品["编号"]
    
    # 下载图片
    下载文件(
        URL=图片URL,
        保存路径="C:\\images\\" + 商品编号 + ".jpg",
        超时=30秒
    )
    输出日志("已下载:" + 商品编号 + ".jpg")
    
    等待(0.5秒)  # 避免下载过快被封

下载图片容易踩的三个坑:

坑1:图片URL是相对路径 有些平台返回的图片URL是/img/xxx.jpg,需要拼完整URL:

完整URL = "https:" + 相对路径  # 或 "https://img.pdd.com" + 相对路径

坑2:图片下载失败(403/404) 可能是防盗链机制。解决办法:在下载指令里加**"Referer"请求头**,模拟从目标页面访问图片。

# 下载文件指令的"请求头"参数里添加:
Referer: https://www.pinduoduo.com

坑3:文件名有特殊字符 图片URL里可能带?&%等特殊字符,直接用作文件名会报错。用Python清洗一下:

import re

def safe_filename(url):
    # 提取URL中最后一个/后面的部分
    filename = url.split('/')[-1]
    # 去掉?后面的参数
    filename = filename.split('?')[0]
    # 只保留字母、数字、点、下划线、中划线
    filename = re.sub(r'[^a-zA-Z0-9._-]', '', filename)
    return filename

操作五:批量删除空文件或旧文件

场景: 流程运行久了,日志文件夹、临时图片文件夹里堆积了大量文件,需要定期清理。

# 1. 获取文件夹内所有文件
获取文件夹内文件列表("C:\logs") → 存入「所有文件」

# 2. 循环检查每个文件
循环列表(所有文件):
    当前文件路径 = "C:\logs\" + 当前循环项
    
    # 获取文件大小(影刀指令:获取文件信息)
    文件大小KB = 获取文件大小(当前文件路径)  # 单位KB
    
    # 删除空文件(小于1KB视为空)
    如果 文件大小KB < 1:
        删除文件(当前文件路径)
        输出日志("已删除空文件:" + 当前文件路径)
    
    # 或者按时间删除:获取文件修改时间
    修改时间 = 获取文件修改时间(当前文件路径)
    如果 当前时间 - 修改时间 > 30天:
        删除文件(当前文件路径)
        输出日志("已删除旧文件:" + 当前文件路径)

操作六:按日期归档文件

场景: 每天采集的图片和数据,需要按YYYY-MM-DD的格式归档到不同文件夹。

# 生成当天的归档文件夹路径
当前日期 = 当前日期格式化("YYYY-MM-DD")
归档根目录 = "C:\archive\"
当天归档目录 = 归档根目录 + 当前日期 + "\"

# 创建当天目录(如果不存在)
如果 文件夹不存在(当天归档目录):
    创建文件夹(当天归档目录)

# 移动文件到归档目录
获取文件夹内文件列表("C:\temp\待归档") → 存入「待归档文件列表」

循环列表(待归档文件列表):
    当前文件 = 当前循环项
    移动文件(
        原路径="C:\temp\待归档\" + 当前文件,
        目标路径=当天归档目录 + 当前文件
    )

输出日志("已归档 " + 列表长度(待归档文件列表) + " 个文件到 " + 当天归档目录)

进阶:按月份建文件夹

当前月份 = 当前日期格式化("YYYY-MM")
归档目录 = "C:\archive\" + 当前月份 + "\"
# 所有当月文件放进同一个文件夹,跨月自动新建

操作七:文件批量压缩(配合发送邮件)

场景: 采集完几百张图片后,需要打包成ZIP发给同事。

影刀没有直接的"压缩文件夹"指令,但可以用"执行Python代码"调用Python的zipfile库:

# 执行Python代码:将文件夹压缩为ZIP
# 输入:source_folder(文本),目标zip路径(文本)
# 输出:无

import zipfile
import os

def zip_folder(source_folder, zip_path):
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(source_folder):
            for file in files:
                file_path = os.path.join(root, file)
                arcname = os.path.relpath(file_path, start=source_folder)
                zipf.write(file_path, arcname)

zip_folder("C:\\images\\今日采集", "C:\\output\\今日采集图片.zip")

压缩完成后,可以用影刀的"发送邮件"指令把ZIP文件作为附件发出。


文件处理常见问题速查表

现象排查方向修复方法
找不到文件路径写错了检查路径是否存在,\\是否正确
文件正在使用无法操作Excel或图片被其他程序打开关闭正在打开该文件的程序
重命名报错"已存在"目标文件名已存在先判断文件是否存在,存在则先删除或改名
图片下载失败防盗链或URL失效检查Referer请求头,或URL是否完整
Excel合并后数据错位表头不一致检查所有文件的列名是否完全一致
批量操作卡住文件数量太大分批处理,每批50个
文件名乱码编码问题用Python处理文件名时指定encoding='utf-8'

一条核心建议

把文件处理操作也做成"子流程模板",和采集逻辑分开。

  • F01_批量重命名模板
  • F02_按规则分类模板
  • F03_Excel合并模板
  • F04_图片下载模板

这些模板和采集流程无关,任何项目需要文件处理时直接调用。采集流程只管"抓数据",文件处理流程只管"整理数据",各司其职,互不干扰。

我现在的做法是:采集流程输出原始文件到一个"待处理"文件夹,然后单独跑一个"文件整理流程"(定时任务),自动完成重命名、分类、合并、归档这一整套操作。这样采集流程崩了,文件整理流程不浪费时间重复执行;文件整理逻辑改了,也不需要改采集流程。


推荐资源

  • Python os模块文档(文件路径操作)
  • Python shutil模块文档(文件复制/移动)
  • 影刀官方文档:"文件与文件夹"指令集说明

#影刀RPA #RPA自动化 #文件处理 #Excel合并 #图片下载

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论