公司项目采用git做版本控制,但是里面的有几个文件是做环境配置的,每次更新下来都要改其中的一些变量,比较麻烦, 就自己写了一个python小程序做替换,然后编写了shell文件,在每次从git上更新之后,可以通过运行脚本完成文本替换。
一、python文件
#!/usr/bin/python
#change environment.json and servlet.json
import os
import json
#open environment.json
env_path = "文件路径"
servlet_path = "文件路径"
def change_environment(env_path):
after = []
with open(env_path, 'rb') as f:
data = json.loads(f.read())
print type(data)
for zidian in data:
print(zidian)
if data['tunnelPrvkey'] != "被替换值":
data['tunnelPrvkey'] = "替换值"
after = data
with open(env_path, 'wb') as f:
data = json.dump(after, f,indent=)
def change_servlet(servlet_path):
after = []
with open(servlet_path, 'r') as f:
data = json.loads(f.read())
print type(data)
for zidian in data:
if data['tunnelPrvkey'] != "被替换值":
data['tunnelPrvkey'] = "替换值"
after = data
with open(servlet_path, 'wb') as f:
data = json.dump(after, f,indent=)
change_environment(env_path)
change_servlet(servlet_path)
二、shell脚本
#!/bin/bash
echo "change environment"
python /home/ncs/changeenvironment.py
三、处理json文件
1. python->json
a. dump: 将 Python 对象编码成 JSON 字符串,并将字符串写入文件中(多了一个文件对象)
b. dumps:将 Python 对象编码成 JSON 字符串
源码:
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw):
def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw):
2. json->python
a. load: 将已编码的 JSON 字符串解码为 Python 对象,增加文件读操作(基本不用)
b: loads: 将已编码的 JSON 字符串解码为 Python 对象
3. json文件格式化
在dumps()方法中有一个indent=None的参数,使用indent参数对json数据格式化输出,比如设置indent=2意味着在每个键值对另起一行,同时缩进2个空格。
四、问题总结
-
运行python 提示:please select a valid interpreter
原因:第一次使用pycharm,没有导入python文件
解决方法:进入pycharm->setting,查找interpreter,双击 project Interpreter,在 Project Interpreter选择编译器,点击apply,重新启动pycharm。
-
读取页面返回字典值提示错误:TypeError: string indices must be integers, not str
原因:打印出来发现是操作对象错误
解决方法:通过type()函数检查操作对象类型