影刀RPA进阶教程:Python协同数据清洗的实战用法

做电商数据采集的时候,影刀RPA内置的指令能解决80%的问题,但剩下的20%——比如价格格式转换、时间戳解析、JSON嵌套数据提取——用内置指令处理起来步骤多、容易出错。我也是非技术背景,一开始看到“Python脚本”那个指令就绕道走,后来被逼着试了一次,才发现影刀里的Python用法不需要你会写完整程序,只需要会用现成的代码片段就行

picture.image 这篇文章不讲Python语法,只讲在影刀RPA里最实用的几个数据清洗场景:正则提取数字和日期、Pandas合并去重、JSON解析嵌套字段。每个场景都有可以直接复制修改的代码,你照着改自己的变量名就能用。

影刀里Python脚本指令怎么用,参数怎么传

picture.image

在影刀的指令面板搜索“Python”,拖出“执行Python脚本”指令。双击打开编辑窗口,左边是代码区,右边是“输入变量”和“输出变量”的映射区。

最关键的规则:影刀变量和Python变量不是一回事。 你在流程里创建的{{商品标题}}变量,Python代码里不认。必须先在右侧“输入变量”里,把影刀变量映射一个Python变量名,比如把{{商品标题}}映射成title,然后在代码里用title来引用。

picture.image

同样,代码里算出的结果想带回影刀流程,要在右侧“输出变量”里,把Python变量映射回影刀变量名。比如Python里算出了price_clean,映射成影刀的{{清洗后价格}}

一个最简单的测试例子:

picture.image

  1. 拖入“执行Python脚本”
  2. 输入变量里加一条:影刀变量{{原始价格}}映射为Python变量raw_price
  3. 代码区写:

picture.image

price_clean = raw_price.replace('¥', '').strip()
  1. 输出变量里加一条:Python变量price_clean映射为影刀变量{{清洗后价格}}

picture.image 5. 点击运行,{{清洗后价格}}就是去掉¥符号之后的结果

Python脚本指令需要点亮Python图标才能运行。 如果运行报“环境未配置”,去影刀设置里检查Python环境,创业版支持内置Python,社区版可能需要手动指定Python路径,这也是一个影刀版本差异。

picture.image

场景一:用正则表达式批量清洗价格、销量、编号

电商数据里最常见的脏活:价格带“¥”和“起”、销量写成“1.2万+”、商品ID被Excel转成科学计数法。这些用正则表达式几行代码就能搞定。

picture.image

import re

# 输入变量映射:

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/4762720482af4099bc50e87a9832bc32~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783385874&x-signature=wPztCh2QDFqEOO%2BVGWdrTtQbTug%3D)
# raw_price: 原始价格文本,如 "¥9.9起", "¥12.8-18.5", "1.2万+"
# raw_sales: 原始销量文本,如 "已拼1.2万件", "100+人付款"

def clean_price(raw):
    """清洗价格,返回最低价格数值"""
    raw = raw.replace('¥', '').replace(' ', '')
    if '万' in raw:
        num = re.findall(r'[\d.]+', raw)
        return float(num[0]) * 10000 if num else 0.0
    if '-' in raw:
        parts = raw.split('-')
        nums = re.findall(r'[\d.]+', parts[0])
        return float(nums[0]) if nums else 0.0
    nums = re.findall(r'[\d.]+', raw)
    return float(nums[0]) if nums else 0.0

def clean_sales(raw):
    """清洗销量,返回整数"""
    if '万' in raw:
        num = re.findall(r'[\d.]+', raw)
        return int(float(num[0]) * 10000) if num else 0
    nums = re.findall(r'\d+', raw)
    return int(nums[0]) if nums else 0

# 调用清洗函数
price_result = clean_price(raw_price)
sales_result = clean_sales(raw_sales)

picture.image

然后把 price_resultsales_result 映射回影刀变量,直接写入Excel就是干干净净的数字了。

正则表达式 r'[\d.]+' 解释: \d 是数字,\. 是小数点,[]+ 表示匹配一个或多个这些字符。所以它能把“9.9”从乱糟糟的文本里精准抓出来。不用记这些语法,用的时候复制粘贴改参数就行。

场景二:用Pandas合并多个Excel并去重

每天采集的数据存成单独文件,月底要合并成一份总表,同时去掉重复的商品ID。手动操作繁琐且容易漏。影刀内置的Excel指令也能合并,但去重和格式保留不如Pandas灵活。

import pandas as pd
import os
from glob import glob

# 输入变量映射:
# folder_path: Excel文件存放的文件夹路径,如 "D:/采集数据/拼多多/"
# output_path: 合并后输出文件路径,如 "D:/采集数据/拼多多_月度汇总.xlsx"

# 读取文件夹下所有xlsx文件
all_files = glob(os.path.join(folder_path, "*.xlsx"))

df_list = []
for file in all_files:
    df = pd.read_excel(file)
    df_list.append(df)

# 合并所有DataFrame
merged_df = pd.concat(df_list, ignore_index=True)

# 按商品ID去重,保留第一次出现的记录
merged_df.drop_duplicates(subset=['商品ID'], keep='first', inplace=True)

# 写入Excel,保留原始格式
merged_df.to_excel(output_path, index=False, engine='openpyxl')

# 输出合并后的总行数和去重后行数
total_rows = len(merged_df)

几个值得注意的参数:

  • subset=['商品ID']:指定按哪一列去重,换成你表格里的列名
  • keep='first':重复时保留第一条,改成 'last' 保留最后一条
  • index=False:写入时不带行号,这很关键,否则Excel里会多一列序号
  • engine='openpyxl':指定写入引擎,避免因为Excel格式问题报错

如果你的影刀流程需要先安装Pandas,在影刀的“执行Python脚本”里第一次运行时如果提示“No module named pandas”,在影刀设置里找到Python环境管理,安装pandas和openpyxl两个包。创业版内置环境一般已预装。

场景三:解析JSON嵌套数据,提取多层字段

很多平台的API返回数据、或者网页里嵌入的JSON数据,是嵌套结构的。比如飞书多维表格读取出来的某列存的是JSON字符串,或者TikTok Shop接口返回的数据里,商品变体信息在深层字段里。用影刀内置指令一层层拆很痛苦,Python的json库一行搞定。

import json

# 输入变量映射:
# json_str: 待解析的JSON字符串,可能是接口响应或单元格内容

# 解析JSON
data = json.loads(json_str)

# 假设数据结构是:
# {"code":0, "data": {"items": [{"title":"商品A", "skus":[{"price":10.5, "stock":100}]}]}}
# 我们要提取所有SKU的价格和库存

items = data.get('data', {}).get('items', [])
sku_list = []
for item in items:
    title = item.get('title', '')
    for sku in item.get('skus', []):
        sku_list.append({
            '商品标题': title,
            '价格': sku.get('price', 0),
            '库存': sku.get('stock', 0)
        })

# 将结果转换为列表的列表,方便影刀写入Excel
result = [[d['商品标题'], d['价格'], d['库存']] for d in sku_list]

result 是一个二维列表,映射回影刀后,可以直接用“遍历列表”逐行写入Excel,或者转成数据表格变量后批量写入。

一个容易踩坑的地方: 如果JSON字符串来自网页源码,里面可能有转义字符(比如\"),json.loads() 会报错。可以先打印出来看看,必要时用 json_str.replace('\\"', '"') 处理一下再解析。

Python代码调试的小技巧:用输出日志看中间结果

在影刀的Python脚本编辑窗口里写代码,不像IDE那样能逐行调试。如果结果不对,最有效的排查方法是用 print() 把中间变量打出来,影刀会把这些输出显示在运行日志里。

print("原始价格:", raw_price)
price_result = clean_price(raw_price)
print("清洗后:", price_result)

流程运行后,在影刀的“输出”面板里就能看到这些打印信息,快速定位哪一步出了问题。调试完确认没问题了,再把调试用的print注释掉或删掉。


Python协同常见错误速查

错误提示原因解决
ModuleNotFoundError: No module named 'pandas'Python环境未安装Pandas影刀设置里安装依赖包
NameError: name 'xxx' is not defined输入变量未映射或Python变量名拼错检查右侧输入变量映射和代码里变量名一致性
json.decoder.JSONDecodeError字符串不是合法JSON,可能含转义或HTML打印字符串检查,手动清理后再解析
返回值为None函数有return但忘了映射输出变量确认输出变量列表里包含了函数返回值

推荐资源: 影刀官方社区有用户整理的“Python数据清洗常用代码片段合集”,收录了电商场景下十几个高频清洗函数,直接搜索就能找到。另外,正则表达式入门推荐“regex101”这个在线工具,把原始文本粘进去,写正则表达式能实时看到匹配结果,非技术背景上手很快。


#影刀RPA #RPA自动化 #Python #数据清洗 #电商自动化

作者:林焱

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

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