共计 2096 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | python 脚本中读取配置文件通常将配置文件放在 json 格式的文件中,然后做后续的处理,那么在 linux 服务器上编辑和读取 json 文件有什么技巧呢?来看一下吧, |
Json 数据格式化
json 是一种轻量级的数据交换格式,应用范围非常广泛。在 Linux 系统下使用 jq 工具可以非常方便的处理 json
[root@knode1 ~]# cat k8s.conf
{"hosts": {"host_list": [ {"hostname": "host1", "ip": "10.1.251.1", "username": "aps", "password": "tingsoft", "ssh_port": 22}, {"hostname": "host24", "ip": "10.1.251.2", "username": "aps", ssword":"tingsoft","ssh_port": 22} ],"sshkey_enable": false,"data_dir":"/opt","src":"/etc/localtime","dest":"/etc/timezone","port":"8080" } }
在 linux 上安装 jq 工具
[root@knode1 ~]# yum -y install jq
将上面 k8s.conf 文件用 json 格式展示, 提高可读性
方法一:cat filename.conf | jq
[root@knode1 ~]# cat k8s.conf | jq
{
"hosts": {
"host_list": [
{
"hostname": "host1",
"ip": "10.1.251.1",
"username": "aps",
"password": "tingsoft",
"ssh_port": 22
},
{
"hostname": "host24",
"ip": "10.1.251.2",
"username": "aps",
"password": "tingsoft",
"ssh_port": 22
}
],
"sshkey_enable": false,
"data_dir": "/opt",
"src": "/etc/localtime",
"dest": "/etc/timezone",
"port": "8080"
}
}
jq 工具会把 json 文件更有好的读取出来,此外,jq 工具还在背后检查 json 文件的合法性,如果文件存在格式上的错误,jq 也会报出错误存在的位置
方法二:cat filename.conf | python -m json.tool
python -m json.tool 这种方法需要服务器上安装 python,效果和 jq 一样,也会校验数据合法性,出现格式报错会报出位置
[root@knode1 ~]# cat k8s.conf | python -m json.tool
Expecting object: line 1 column 343 (char 342)
Json 数据读取
通过 Key 获取 Value 的值
[root@knode1 ~]# cat k8s.conf | jq .hosts
{
"host_list": [
{
"hostname": "host1",
"ip": "10.1.251.1",
"username": "aps",
"password": "tingsoft",
"ssh_port": 22
},
{
"hostname": "host24",
"ip": "10.1.251.2",
"username": "aps",
"password": "tingsoft",
"ssh_port": 22
}
],
"sshkey_enable": false,
"data_dir": "/opt",
"src": "/etc/localtime",
"dest": "/etc/timezone",
"port": "8080"
}
[root@knode1 ~]# cat k8s.conf | jq .hosts.host_list
[
{
"hostname": "host1",
"ip": "10.1.251.1",
"username": "aps",
"password": "tingsoft",
"ssh_port": 22
},
{
"hostname": "host24",
"ip": "10.1.251.2",
"username": "aps",
"password": "kingsoft",
"ssh_port": 22
}
]
解析不存在的元素 key 时,会返回 null,.hosts.host_list 这种属于嵌套解
自定义输出数组
对于上面 jq .hosts.host_list 获取的结果,还可以通过【】数组形式获取
[root@knode1 ~]# cat k8s.conf | jq .hosts.host_list[0]
{
"hostname": "host1",
"ip": "10.1.251.1",
"username": "ups",
"password": "tingsoft",
"ssh_port": 22
}
掌握了上面这些基本的数据处理方法,我们就可以在 linux 和 python 脚本中做一些配置的基础处理了。
正文完
星哥玩云-微信公众号