2014年网站设计趋势,惠州seo网络推广,南宁画册设计公司,温州英文网站建设文章目录 背景1、定义正则表达式2、替换变量占位符3、实现功能 背景
使用python编写小工具#xff0c;有一个配置文件#xff0c;希望实现类似shell命令的#xff0c;定义变量并且使用${}或者$来引用。如果有好的建议欢迎讨论。
配置文件示例内容如下: D:\project\test\pr… 文章目录 背景1、定义正则表达式2、替换变量占位符3、实现功能 背景
使用python编写小工具有一个配置文件希望实现类似shell命令的定义变量并且使用${}或者$来引用。如果有好的建议欢迎讨论。
配置文件示例内容如下: D:\project\test\properties.txtip192.168.1.66
userxiaoshuai
password123456login_urlhttps://${ip}/index.php/user$user?password$password?name${user}
总体思路如下
读取文件存储出现的变量将存在占位符的变量使用已读取的变量替换。如果找不到则不替换。
1、定义正则表达式
首先先需要将替换的代码写好这里直接使用正则表达式替换占位符然后使用变量进行替换。
# 定义正则表达式
pattern re.compile(r\$\{(\w)}|\$(\w))这个表达式包含可以匹配用${}或者$形式的占位符且有两个捕获组用以获取占位符中实际的变量。
2、替换变量占位符
需要替换的字符串如下
string rhttps://${ip}/index.php/user$user?password$password?name${user}这里可以使用正则表达式sub()函数进行替换
# 使用正则表达式进行替换
result pattern.sub(replace, string)replace可以是具体的替换字符串也可以是自定义函数。因为这里需要根据占位符的实际内容来获取不同的变量值所以需要使用自定义的函数
# 替换占位符的回调函数
def replace(match):var_name match.group(1) if match.group(1) else match.group(2)return str(param_dict.get(var_name, match.group()))replace 函数首先检查第一个捕获组如果存在则使用它否则使用第二个捕获组。这样就可以处理 ${variable} 和 $variable 形式的占位符了。
当然也可以使用lambda匿名函数一行处理那么sub的写法则为
result pattern.sub(lambda x: str(param_dict.get(x.group(1) if x.group(1) else x.group(2), x.group())), string)3、实现功能
读取文件、存储变量、替换占位符和变量
import repath rD:\project\test\properties.txtvar_dict dict()
# 定义正则表达式
pattern re.compile(r\$\{(\w)}|\$(\w))with open(path, r) as file:for line in file:line line.replace(\n, ).strip()if not line:continue# 获取配置项key line.split()[0].strip()value line.replace(key, , 1).replace(, , 1).strip()# 将value中的通配符替换为实际的值value pattern.sub(lambda x: str(var_dict.get(x.group(1) if x.group(1) else x.group(2), x.group())), value)var_dict[key] valuefor k, v in var_dict.items():print(f{k}\t{v})结果如下