python腳本中讀取配置文件通常將配置文件放在json格式的文件中,然后做后續(xù)的處理,那么在linux服務(wù)器上編輯和讀取json文件有什么技巧呢?來看一下吧,

Json數(shù)據(jù)格式化
json是一種輕量級的數(shù)據(jù)交換格式,應(yīng)用范圍非常廣泛。在Linux系統(tǒng)下使用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這種方法需要服務(wù)器上安裝python,效果和jq一樣,也會校驗數(shù)據(jù)合法性,出現(xiàn)格式報錯會報出位置
[root@knode1 ~]# cat k8s.conf | python -m json.tool
Expecting object: line 1 column 343 (char 342)
Json數(shù)據(jù)讀取
[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獲取的結(jié)果,還可以通過【】數(shù)組形式獲取
[root@knode1 ~]# cat k8s.conf | jq .hosts.host_list[0]
{
"hostname": "host1",
"ip": "10.1.251.1",
"username": "ups",
"password": "tingsoft",
"ssh_port": 22
}
掌握了上面這些基本的數(shù)據(jù)處理方法,我們就可以在linux和python腳本中做一些配置的基礎(chǔ)處理了。