影刀RPA Python读写配置文件:INI与YAML管理参数告别硬编码

影刀RPA Python读写配置文件:INI与YAML管理参数告别硬编码

作者:林焱

刚开始写流程的时候,大家都习惯把参数直接写在指令里。比如收件人邮箱写死、采集页数写个10、延时写个3秒。流程跑了一周没问题,很完美。

突然有一天老板说:“收件人再加三个,页数改成50页,延时改成5秒。”

你打开流程,从上到下翻半天,找到三处硬编码的参数,改完一跑——发现还有第四处忘了改。

这就是为什么需要配置文件。这篇文章讲如何用Python在影刀流程中管理配置参数,一次改、处处生效。

方案一:INI文件(最简单)

INI是Windows上最传统的配置文件格式,简单到不需要任何第三方库:

; config.ini [email] smtp_server = smtp.qq.com sender = your_email@qq.com receivers = user1@qq.com, user2@qq.com, user3@qq.com [collect] max_pages = 50 [video(video-h3c0vT8z-1783622932362)(type-csdn)(url-https://live.csdn.net/v/embed/525000)(image-https://v-blog.csdnimg.cn/asset/23da3fe1f67a47106d725406cfde9a97/cover/Cover0.jpg)(title-拼多多店群自动化上架方案)] delay_seconds = 5 base_url = https://example.com/products [paths] output_dir = D:\报表 temp_dir = D:\临时文件

Python读取(一行代码搞定):

importconfigparserimportos config=configparser.ConfigParser()config.read(os.path.join(os.path.dirname(__file__),'config.ini'),encoding='utf-8')# 读取值,类型都是字符串,需要自己转换receivers=config['email']['receivers'].split(', ')max_pages=int(config['collect']['max_pages'])delay=float(config['collect']['delay_seconds'])

注意:configparser读取的值全是字符串。数字要自己转int()float(),布尔值转True/False还得自己写判断。

方案二:YAML文件(最灵活)

YAML比INI强大得多,支持嵌套结构、列表、布尔值、数字类型自动识别:

# config.yamlemail:smtp_server:smtp.qq.comsender:your_email@qq.comreceivers:-user1@qq.com-user2@qq.com-user3@qq.comcollect:max_pages:50delay_seconds:5base_url:https://example.com/productsenabled:truepaths:output_dir:D:\报表temp_dir:D:\临时文件

Python读取(需要安装pyyaml):

# pip install pyyamlimportyamlwithopen('config.yaml','r',encoding='utf-8')asf:config=yaml.safe_load(f)# 直接拿到正确的类型receivers=config['email']['receivers']# 自动是列表max_pages=config['collect']['max_pages']# 自动是数字enabled=config['collect']['enabled']# 自动是布尔值

强烈推荐用yaml.safe_load()而不是yaml.load()。后者可以执行任意Python代码,有安全风险。

实战:在影刀流程中集成配置文件

完整的流程架构:

  1. 影刀启动流程
  2. Python代码块读取config.yaml → 所有参数存入影刀变量
  3. 影刀主流程使用这些变量(发邮件、采集数据、存储文件等)
  4. 需要改参数时,只改config.yaml,流程代码零改动
importyamlimportos# 配置文件放在和流程文件同一目录config_path=os.path.join(os.path.dirname(__file__),'config.yaml')withopen(config_path,'r',encoding='utf-8')asf:cfg=yaml.safe_load(f)# 把需要的参数提取出来,赋值给影刀变量smtp_server=cfg['email']['smtp_server']receivers=cfg['email']['receivers']max_pages=cfg['collect']['max_pages']# ... 更多参数

踩坑实录

坑1:YAML缩进必须用空格

YAML对缩进极其敏感,必须用空格(不能用Tab)。而且同一层级的缩进必须一致(2个或4个空格)。用Tab会导致yaml.safe_load()报错。

坑2:YAML的布尔值写法

YAML中true/falseyes/noon/off(不区分大小写)都会被解析为布尔值。如果你想保留字符串"yes",需要用引号包起来:"yes"

TEMU店群如何管理运营?


坑3:configparser默认把键名转小写

[SECTION] UserName = admin

config['SECTION']['UserName']会报错,因为键被转成了小写username。在创建configparser时加一行:

config=configparser.ConfigParser()config.optionxform=str# 保留原始大小写

坑4:配置文件路径问题

在影刀的Python代码块里,__file__不一定指向你期望的位置。建议用绝对路径,或者把配置文件路径作为影刀的输入参数传入Python代码块。

INI还是YAML?

  • 选INI:参数简单(都是键值对)、不想安装第三方库、团队成员对Python不太熟
  • 选YAML:参数有嵌套结构、需要列表和布尔类型、追求可读性

我的习惯:小项目用INI,复杂流程用YAML。但不管选哪个,都比硬编码强一百倍。

写在最后

配置文件是专业流程和非专业流程的分水岭。一个参数改一次就能生效的流程,和一个要改四五处还可能漏掉的流程,给用户的体验天差地别。花10分钟加个配置文件,未来省你10小时排查时间。