[python] clash profile文件的快捷修正

众所周知的原因,这篇文章不可能说你想知道的东西,但是倒也确实是针对了使用过程中遇到的一个问题提出了可行的解决方案,这个问题就是,怎么自动给profile添加自定义的规则。

为什么要添加自定义规则呢?

比如你家的adobe全家桶是不是定期要背着你给服务器打小报告呢?我很反感这个动作,不过与其去设置防火墙,我发现直接在clash里面设置规则会更有用,比如添加下面这样的一个规则

DOMAIN-SUFFIX,adobe.com,REJECT

但是这种自定义的规则没法长期写入clash的profile,因为只要一旦更新profile,这个规则就没了。加上最近clash的profile更新非常勤快,感觉每次一开机他就会自动更新一下……以前还勉强能手动搞搞,现在实在是太烦人了。

所以写一个python脚本吧

我的想法是写一个python脚本,然后再写一个bat文件,每次双击bat文件就能运行这个python脚本了

实现步骤主要是下面几步:

更改工作文件夹,进入clash的profile文件夹,读取list.yml从list.yml中读取最新的profile文件的文件名,读取最新的profile yaml读取profile yaml中的rules项,追加我们的自定义规则将修改后的profile yaml对象dump到硬盘,使用原来的文件名覆盖旧的文件import os import yaml wd = rC:\Users\xxxx\.config\clash\profiles os.chdir(wd) with open(list.yml,encoding=utf8) as yml_file: list_yml = yaml.safe_load(yml_file) # list.yml里面不一定只有一个profile,我们需要更新的是有订阅信息的(也就是url不为空的那个) for e in list_yml[files]: if len(e[url])>0: config_file_path = e[time] print(config_file_path) with open(config_file_path,encoding=utf8) as yml_config_file: config_yml = yaml.safe_load(yml_config_file) config_entry_check = 自定义规则 if not(config_entry_check in config_yml[rules]): config_yml[rules].append(config_entry_check) with open(config_file_path,encoding=utf8,mode=w) as yml_config_writer: yaml.dump(config_yml,yml_config_writer)