影刀RPA 字符串格式化%s、format、f-string对比作者林焱什么情况用你在影刀RPA里需要拼一段文字——比如生成报表标题2026年7月销售数据_共128条、写日志第3页采集成功耗时12.5秒、构造API请求URLhttps://api.example.com/data?page1size20。这些场景都需要把变量嵌入到字符串中。Python有三种字符串格式化方式%s、str.format()、f-string。影刀RPA的Python代码块三种都支持但该用哪种哪种最不容易出错本文用实际RPA场景对比三种写法告诉你什么时候用什么。怎么做一、三种格式化方式对比方式语法Python版本可读性推荐度%s文本%s % var所有版本一般了解即可format()文本{}.format(var)2.6较好兼容场景用f-stringf文本{var}3.6最好首选二、%s 百分号格式化老式写法name张三age25score95.5# 基本用法msg姓名%s年龄%d分数%.1f%(name,age,score)# 姓名张三年龄25分数95.5# 常见占位符# %s - 字符串# %d - 整数![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/42e5ac38df9447a69d3d74743356100e.png#pic_center)# %f - 浮点数%.2f保留2位小数# %x - 十六进制# RPA场景生成文件名date_str20260701count128filenamereport_%s_%d.xlsx%(date_str,count)# report_20260701_128.xlsx缺点变量多了容易搞混顺序可读性差。三、format() 方法过渡写法拼多多店群自动化报活动上架name张三age25score95.5# 位置参数msg姓名{}年龄{}分数{:.1f}.format(name,age,score)# 命名参数推荐可读性好msg姓名{name}年龄{age}分数{score:.1f}.format(namename,ageage,scorescore)# RPA场景构造URLbasehttps://api.example.com/datapage1size20url{base}?page{page}size{size}.format(basebase,pagepage,sizesize)# https://api.example.com/data?page1size20# 对齐与填充# 左对齐宽度20{:20}.format(hello)# hello # 右对齐{:20}.format(hello)# hello# 居中{:^20}.format(hello)# hello # 数字补零{:05d}.format(42)# 00042四、f-string 格式化首选写法Python 3.6引入影刀RPA的Python代码块完全支持name张三age25score95.5date_str20260701count128# 基本用法直接在{}里写变量名msgf姓名{name}年龄{age}分数{score:.1f}# 姓名张三年龄25分数95.5# 直接写表达式msgf第{page}页共{total}页进度{page/total*100:.1f}%# 生成文件名filenamefreport_{date_str}_{count}.xlsx# 构造URLurlfhttps://api.example.com/data?page{page}size{size}![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6dce3a3937a74defbd1623c669d392dd.png#pic_center)# 调用函数importdatetime nowdatetime.datetime.now()msgf当前时间{now.strftime(%Y-%m-%d %H:%M:%S)}# 多行字符串reportf 采集报告 日期{date_str}总页数{total}成功{success}失败{fail}耗时{elapsed:.1f}秒 五、RPA实战场景对比场景1生成调试日志# %s写法不推荐log第%d页采集完成获取%d条数据耗时%.1f秒%(page,count,elapsed)# format写法log第{}页采集完成获取{}条数据耗时{:.1f}秒.format(page,count,elapsed)# f-string写法推荐logf第{page}页采集完成获取{count}条数据耗时{elapsed:.1f}秒场景2构造多参数API请求api_keyabc123keyword手机page1sortprice_asc# f-string最清晰urlfhttps://api.shop.com/search?key{api_key}q{keyword}page{page}sort{sort}# 如果参数很多用字典urlencode更安全fromurllib.parseimporturlencode params{key:api_key,q:keyword,page:page,sort:sort}urlfhttps://api.shop.com/search?{urlencode(params)}场景3生成格式化报表文本data[{name:商品A,price:128.5,stock:50},{name:商品B,price:299.0,stock:0},{name:商品C,price:59.9,stock:120},]# 用f-string生成对齐的表格headerf{商品名:10}{价格:8}{库存:6}separator-*28lines[header,separator]foritemindata:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f4c0768774c4476c8a977fc147f23b99.png#pic_center)linef{item[name]:10}{item[price]:8.1f}{item[stock]:6d}lines.append(line)report\n.join(lines)# 输出# 商品名 价格 库存# ----------------------------# 商品A 128.5 50# 商品B 299.0 0# 商品C 59.9 120场景4影刀变量在字符串中的使用# 从影刀变量读取pageyd_var[current_page]totalyd_var[total_pages]statusyd_var[scrape_status]# f-string直接使用影刀变量msgf页面{page}/{total}状态{status}yd_var[log_message]msg六、格式化符号速查表# 数字格式化f{3.14159:.2f}# 3.14 - 保留2位小数f{3.14159:.0f}# 3 - 不保留小数f{0.855:.1%}# 85.5% - 百分比f{1000000:,}# 1,000,000 - 千分位f{42:08d}# 00000042 - 补零f{255:x}# ff - 十六进制f{0.15:.0%}# 15% - 整数百分比# 字符串格式化f{left:10}# left - 左对齐宽10f{right:10}# right - 右对齐宽10f{center:^10}# center - 居中宽10f{pad:*^10}# ***pad**** - 居中用*填充# 日期格式化importdatetime nowdatetime.datetime.now()f{now:%Y-%m-%d}# 2026-07-01f{now:%H:%M:%S}# 21:30:00f{now:%Y%m%d_%H%M%S}# 20260701_213000 - 用于文件名七、在影刀指令中的使用在影刀的【输出调试信息】、【设置变量】等指令的表达式框中可以直接写Python表达式【输出调试信息】 内容: f第{page}页处理完成共{count}条数据 【设置变量】 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2fee2f8c67dc4d918e20f4e24dc2fcf5.png#pic_center) 变量名: report_title 值: f{date_str}_销售数据_共{total}条注意在影刀指令的表达式中使用f-string时确保引用的变量已经在流程中定义。有什么坑坑1f-string中引号嵌套现象f{hello}可以但f{he said hi}报错。原因f-string中外层引号和内层引号不能相同。解决外层用双引号内层用单引号或反过来。如果字符串里有引号用转义或不同类型引号# 正确msgf他说{name}msgf他说{name}坑2%s的参数数量不匹配TEMU店群矩阵自动化运营核价报活动现象%s %s % (a,)报错not enough arguments。原因%s格式化的占位符数量必须和传入的元组元素数量完全一致。解决改用f-string从根本上避免参数数量匹配问题。坑3f-string中的花括号冲突现象想在f-string中输出{或}字符但被解释为变量引用。解决用双花括号{{和}}表示字面量花括号# 输出JSON模板msgf配置项: {{key: {value}}}# 配置项: {key: actual_value}坑4格式化浮点数时的银行家舍入现象f{0.125:.2f}结果是0.12而不是0.13。原因Python的round()和f-string格式化使用银行家舍入四舍六入五成双不是传统的四舍五入。解决如果需要严格的四舍五入用decimal模块fromdecimalimportDecimal,ROUND_HALF_UP valueDecimal(0.125)resultvalue.quantize(Decimal(0.01),roundingROUND_HALF_UP)# 0.13坑5影刀表达式框中的f-string语法限制现象在影刀的【条件判断】或【输出调试信息】的表达式框中直接写f...有时不生效。原因影刀的某些表达式框可能不完全支持f-string语法尤其是包含复杂表达式时。解决在【执行Python代码】指令中使用f-string最可靠。在简单表达式框中可以先用【设置变量】计算好字符串再引用变量。或者用字符串拼接text str(var)作为兜底方案。