python脚本中读取配置文件通常将配置文件放在json格式的文件中,然后做后续的处理,那么在linux服务器上编辑和读取json文件有什么技巧呢?来看一下吧,
Json数据格式化
json是一种轻量级的数据交换格式,应用范围非常广泛。在Linux系统下使用jq工具可以非常方便的处理json
复制
1. [root@knode1 ~]# cat k8s.conf
2. {"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" } }1
在linux上安装jq工具
复制
1. [root@knode1 ~]# yum -y install jq
将上面k8s.conf文件用json格式展示,提高可读性
- 方法一:cat filename.conf | jq
复制
1. [root@knode1 ~]# cat k8s.conf | jq
2. {
3. "hosts": {
4. "host_list": [
5. {
6. "hostname": "host1",
7. "ip": "10.1.251.1",
8. "username": "aps",
9. "password": "tingsoft",
10. "ssh_port": 22
11. },
12. {
13. "hostname": "host24",
14. "ip": "10.1.251.2",
15. "username": "aps",
16. "password": "tingsoft",
17. "ssh_port": 22
18. }
19. ],
20. "sshkey_enable": false,
21. "data_dir": "/opt",
22. "src": "/etc/localtime",
23. "dest": "/etc/timezone",
24. "port": "8080"
25. }
26. }
jq工具会把json文件更有好的读取出来,此外,jq工具还在背后检查json文件的合法性,如果文件存在格式上的错误,jq也会报出错误存在的位置
- 方法二:cat filename.conf | python -m json.tool
python -m json.tool这种方法需要服务器上安装python,效果和jq一样,也会校验数据合法性,出现格式报错会报出位置
复制
1. [root@knode1 ~]# cat k8s.conf | python -m json.tool
2. Expecting object: line 1 column 343 (char 342)
Json数据读取
- 通过Key获取Value的值
复制
1. [root@knode1 ~]# cat k8s.conf | jq .hosts
2. {
3. "host_list": [
4. {
5. "hostname": "host1",
6. "ip": "10.1.251.1",
7. "username": "aps",
8. "password": "tingsoft",
9. "ssh_port": 22
10. },
11. {
12. "hostname": "host24",
13. "ip": "10.1.251.2",
14. "username": "aps",
15. "password": "tingsoft",
16. "ssh_port": 22
17. }
18. ],
19. "sshkey_enable": false,
20. "data_dir": "/opt",
21. "src": "/etc/localtime",
22. "dest": "/etc/timezone",
23. "port": "8080"
24. }
25. [root@knode1 ~]# cat k8s.conf | jq .hosts.host_list
26. [
27. {
28. "hostname": "host1",
29. "ip": "10.1.251.1",
30. "username": "aps",
31. "password": "tingsoft",
32. "ssh_port": 22
33. },
34. {
35. "hostname": "host24",
36. "ip": "10.1.251.2",
37. "username": "aps",
38. "password": "kingsoft",
39. "ssh_port": 22
40. }
41. ]
解析不存在的元素key时,会返回null,.hosts.host_list这种属于嵌套解
- 自定义输出数组
对于上面jq .hosts.host_list获取的结果,还可以通过【】数组形式获取
复制
1. [root@knode1 ~]# cat k8s.conf | jq .hosts.host_list[0]
2. {
3. "hostname": "host1",
4. "ip": "10.1.251.1",
5. "username": "ups",
6. "password": "tingsoft",
7. "ssh_port": 22
8. }
掌握了上面这些基本的数据处理方法,我们就可以在linux和python脚本中做一些配置的基础处理了。
来源: 运维之美
>>>>>>点击进入系统运维专题