前言
template.py, 此 Python 脚本, 意在对模板文件的占位符的内容进行更换.
测试输入 test.txt 的内容为:
这个用户的名称为:{name}, 密码为:{pass}
使用方式:
python ./template.py -i ./test.txt -o ./test2.txt -f name:test,pass:123
表示对输入文件的内容进行占位的替换 -f 后面跟格式化的键值对, key 和 value 成对出现, 表示对内容中的 name 替换为 test, pass 替换为 123
文件输出内容为:
这个用户的名称为:test, 密码为:123
template.py 的实现代码为:
import argparse
from pathlib import Path
from icecream import ic
def main():
# 参数解析
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument(
"-f",
"--format",
type=str,
default="",
help="格式化的键值对",
)
parser.add_argument(
"-ms",
"--match_start",
type=str,
default="{",
help="匹配的开始符号",
)
parser.add_argument(
"-me",
"--match_end",
type=str,
default="}",
help="匹配的结束符号",
)
parser.add_argument(
"-i",
"--input",
type=str,
required=True,
help="输入的文件",
)
parser.add_argument(
"-o",
"--output",
type=str,
required=True,
help="输出的文件名",
)
args = parser.parse_args()
ic(args)
formatValue = args.format
match_start_value = args.match_start
match_end_value = args.match_end
inputValue = args.input
outputValue = args.output
ic(formatValue)
ic(match_start_value)
ic(match_end_value)
ic(inputValue)
ic(outputValue)
inputFilePath = Path(inputValue)
ic(inputFilePath)
if inputFilePath.exists() == False:
raise Exception("输入的文件不存在")
if "" == formatValue:
ic("没有格式化的键值对")
return
# 使用逗号分隔
formatList = formatValue.split(",")
ic(formatList)
# 检查每一项中是否有:这个符号, 并且检查:的前后是否有值, 不满足则抛出异常
for item in formatList:
if ":" not in item:
raise Exception("格式化的键值对中没有:这个符号")
if item.split(":")[0] == "" or item.split(":")[1] == "":
raise Exception("格式化的键值对中:的前后没有值")
# 对输入的文件进行读取为 String
with open(inputValue, "r") as fi:
intputFileStr = fi.read()
outputFileStr = intputFileStr
# 对内容中的 {name} 匹配的进行替换
for format_item in formatList:
outputFileStr = outputFileStr.replace(
match_start_value + format_item.split(":")[0] + match_end_value,
format_item.split(":")[1],
)
# 输出到文件
with open(outputValue, "w") as fo:
fo.write(outputFileStr)
# 判断 __main__
if __name__ == "__main__":
main()
版权声明:本文为u011692041原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。