影刀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_emailqq.com receivers user1qq.com, user2qq.com, user3qq.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 configconfigparser.ConfigParser()config.read(os.path.join(os.path.dirname(__file__),config.ini),encodingutf-8)# 读取值类型都是字符串需要自己转换receiversconfig[email][receivers].split(, )max_pagesint(config[collect][max_pages])delayfloat(config[collect][delay_seconds])注意configparser读取的值全是字符串。数字要自己转int()或float()布尔值转True/False还得自己写判断。方案二YAML文件最灵活YAML比INI强大得多支持嵌套结构、列表、布尔值、数字类型自动识别# config.yamlemail:smtp_server:smtp.qq.comsender:your_emailqq.comreceivers:-user1qq.com-user2qq.com-user3qq.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,encodingutf-8)asf:configyaml.safe_load(f)# 直接拿到正确的类型receiversconfig[email][receivers]# 自动是列表max_pagesconfig[collect][max_pages]# 自动是数字enabledconfig[collect][enabled]# 自动是布尔值强烈推荐用yaml.safe_load()而不是yaml.load()。后者可以执行任意Python代码有安全风险。实战在影刀流程中集成配置文件完整的流程架构影刀启动流程Python代码块读取config.yaml → 所有参数存入影刀变量影刀主流程使用这些变量发邮件、采集数据、存储文件等需要改参数时只改config.yaml流程代码零改动importyamlimportos# 配置文件放在和流程文件同一目录config_pathos.path.join(os.path.dirname(__file__),config.yaml)withopen(config_path,r,encodingutf-8)asf:cfgyaml.safe_load(f)# 把需要的参数提取出来赋值给影刀变量smtp_servercfg[email][smtp_server]receiverscfg[email][receivers]max_pagescfg[collect][max_pages]# ... 更多参数踩坑实录坑1YAML缩进必须用空格YAML对缩进极其敏感必须用空格不能用Tab。而且同一层级的缩进必须一致2个或4个空格。用Tab会导致yaml.safe_load()报错。坑2YAML的布尔值写法YAML中true/false、yes/no、on/off不区分大小写都会被解析为布尔值。如果你想保留字符串yes需要用引号包起来yes。TEMU店群如何管理运营坑3configparser默认把键名转小写[SECTION] UserName adminconfig[SECTION][UserName]会报错因为键被转成了小写username。在创建configparser时加一行configconfigparser.ConfigParser()config.optionxformstr# 保留原始大小写坑4配置文件路径问题在影刀的Python代码块里__file__不一定指向你期望的位置。建议用绝对路径或者把配置文件路径作为影刀的输入参数传入Python代码块。INI还是YAML选INI参数简单都是键值对、不想安装第三方库、团队成员对Python不太熟选YAML参数有嵌套结构、需要列表和布尔类型、追求可读性我的习惯小项目用INI复杂流程用YAML。但不管选哪个都比硬编码强一百倍。写在最后配置文件是专业流程和非专业流程的分水岭。一个参数改一次就能生效的流程和一个要改四五处还可能漏掉的流程给用户的体验天差地别。花10分钟加个配置文件未来省你10小时排查时间。