excel的格式如下

python代码如下,这里最难的就是合并单元格的处理

  1. import xlrd
  2. import json
  3.  
  4. excel_obj = xlrd.open_workbook("test.xlsx")
  5.  
  6. sheet_name = excel_obj.sheet_names()[0]
  7.  
  8. sheet_obj = excel_obj.sheet_by_index(0)
  9.  
  10. hadoop_dict = {
  11. "services": [
  12. "AMBARI_METRICS",
  13. "HBASE",
  14. "HDFS",
  15. "HIVE",
  16. "KAFKA",
  17. "MAPREDUCE2",
  18. "PIG",
  19. "SLIDER",
  20. "SMARTSENSE",
  21. "SPARK2",
  22. "STORM",
  23. "TEZ",
  24. "YARN",
  25. "ZOOKEEPER"
  26. ],
  27. "pm_group" :[],
  28. "host_groups":[]
  29. }
  30.  
  31. host = {}
  32. vm = {}
  33. # components_list = []
  34.  
  35. r_num = sheet_obj.nrows
  36. c_num = sheet_obj.ncols
  37.  
  38. merge_cell_list = sheet_obj.merged_cells
  39.  
  40. # for i in range(r_num):
  41. # if sheet_obj.cell_value(i,c_num-1):
  42. # components_list.append(sheet_obj.cell_value(i,c_num-1))
  43.  
  44. # 获取最后一列的所有数据
  45.  
  46. for i in merge_cell_list:
  47. if i[2] == 0:
  48. host[sheet_obj.cell_value(i[0],i[2])] = [i[0],i[1],i[2],i[3]]
  49.  
  50. # 存放所有合并的单元格
  51.  
  52. for k,v in host.items():
  53. host_dict = {}
  54. print(sheet_obj.cell_value(v[0],1),sheet_obj.cell_value(v[0],2),sep="---->")
  55. # 获取主机的ip地址
  56. pm_ip = sheet_obj.cell_value(v[0],2)
  57. print(pm_ip,"物理机地址")
  58.  
  59. print(sheet_obj.cell_value(v[0] + 1,1),sheet_obj.cell_value(v[0] + 1,2),sep="---->")
  60. # 获取主机的主机名
  61. pm_name = sheet_obj.cell_value(v[0] + 1,2)
  62.  
  63. host_dict["ip"] = pm_ip
  64. host_dict["hostname"] = pm_name
  65. host_dict["vms"] = []
  66.  
  67. for vms_cell in merge_cell_list:
  68. vm_dict = {}
  69. vm_components_dict = {}
  70. if vms_cell[1] <= host[k][1] and vms_cell[2] == 2 and vms_cell[0] > host[k][0] + 1:
  71. print(sheet_obj.cell_value(vms_cell[0],2))
  72. # 获取虚拟机的名称
  73. print(sheet_obj.cell_value(vms_cell[0],vms_cell[2] + 1))
  74. # 获取虚拟机的ip的k
  75.  
  76. print(sheet_obj.cell_value(vms_cell[0],vms_cell[2] + 2))
  77. # 获取虚拟机的ip地址
  78. vm_ip = sheet_obj.cell_value(vms_cell[0], vms_cell[2] + 2)
  79.  
  80. print(sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 1))
  81. # 获取虚拟机的虚拟机名称的k
  82.  
  83. print(sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 2))
  84. # 获取虚拟机的名字的值
  85.  
  86. vm_name = sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 2)
  87.  
  88. vm_name = sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 2)
  89. vm_dict = {
  90. "hostname":vm_name,
  91. }
  92.  
  93. vm_components_dict["ip"] = vm_ip
  94. vm_components_dict["hostname"] = vm_name
  95. vm_components_dict["components"] = []
  96.  
  97. host_dict["vms"].append(vm_dict)
  98.  
  99. vmcomponents_location_start = vms_cell[0] + 2
  100. vmcomponents_location_end = vms_cell[1]
  101. # print(vmcomponents_location_start,vmcomponents_location_end,"我是大傻逼")
  102. vm_components_info_list = []
  103. for i in range(vmcomponents_location_start,vmcomponents_location_end):
  104. temp_components = sheet_obj.cell_value(i,c_num-1)
  105. vm_components_info_list.append(temp_components)
  106.  
  107. for component in vm_components_info_list:
  108. temp_dict = {}
  109. temp_dict["name"] = component
  110. vm_components_dict["components"].append(temp_dict)
  111.  
  112. hadoop_dict["host_groups"].append(vm_components_dict)
  113.  
  114. # 获取每个虚拟机的components信息
  115. hadoop_dict["pm_group"].append(host_dict)
  116.  
  117. import json
  118. file_name = "journalnode_".upper() + "test_journalnode_case_1" + "." + "json"
  119. my_file_obj = open(file_name,"w")
  120.  
  121. json.dump(hadoop_dict,my_file_obj,indent=4)
  122. my_file_obj.close()

  

最后按照要求生成制定格式的json文件

  1. {
  2. "services": [
  3. "AMBARI_METRICS",
  4. "HBASE",
  5. "HDFS",
  6. "HIVE",
  7. "KAFKA",
  8. "MAPREDUCE2",
  9. "PIG",
  10. "SLIDER",
  11. "SMARTSENSE",
  12. "SPARK2",
  13. "STORM",
  14. "TEZ",
  15. "YARN",
  16. "ZOOKEEPER"
  17. ],
  18. "pm_group": [
  19. {
  20. "ip": "1.1.1.1",
  21. "hostname": "host1",
  22. "vms": [
  23. {
  24. "hostname": "vm1"
  25. },
  26. {
  27. "hostname": "vm2"
  28. },
  29. {
  30. "hostname": "vm3"
  31. }
  32. ]
  33. },
  34. {
  35. "ip": "1.1.1.2",
  36. "hostname": "host2",
  37. "vms": [
  38. {
  39. "hostname": "vm4"
  40. },
  41. {
  42. "hostname": "vm5"
  43. }
  44. ]
  45. },
  46. {
  47. "ip": "1.1.1.3",
  48. "hostname": "host3",
  49. "vms": [
  50. {
  51. "hostname": "vm6"
  52. }
  53. ]
  54. }
  55. ],
  56. "host_groups": [
  57. {
  58. "ip": "192.168.1.1",
  59. "hostname": "vm1",
  60. "components": [
  61. {
  62. "name": "ZOOKEEPER_SERVER"
  63. },
  64. {
  65. "name": "JOURNALNODE"
  66. },
  67. {
  68. "name": "NODEMANAGER"
  69. }
  70. ]
  71. },
  72. {
  73. "ip": "192.168.1.2",
  74. "hostname": "vm2",
  75. "components": [
  76. {
  77. "name": "HBASE_REGIONSERVER"
  78. },
  79. {
  80. "name": "ZKFC"
  81. }
  82. ]
  83. },
  84. {
  85. "ip": "192.168.1.3",
  86. "hostname": "vm3",
  87. "components": [
  88. {
  89. "name": "HBASE_CLIENT"
  90. }
  91. ]
  92. },
  93. {
  94. "ip": "192.168.1.4",
  95. "hostname": "vm4",
  96. "components": [
  97. {
  98. "name": "ZOOKEEPER_SERVER"
  99. },
  100. {
  101. "name": "JOURNALNODE"
  102. },
  103. {
  104. "name": "NODEMANAGER"
  105. }
  106. ]
  107. },
  108. {
  109. "ip": "192.168.1.5",
  110. "hostname": "vm5",
  111. "components": [
  112. {
  113. "name": "HBASE_REGIONSERVER"
  114. },
  115. {
  116. "name": "ZKFC"
  117. }
  118. ]
  119. },
  120. {
  121. "ip": "192.168.1.6",
  122. "hostname": "vm6",
  123. "components": [
  124. {
  125. "name": "ZOOKEEPER_SERVER"
  126. },
  127. {
  128. "name": "JOURNALNODE"
  129. },
  130. {
  131. "name": "NODEMANAGER"
  132. }
  133. ]
  134. }
  135. ]
  136. }

  

利用xlrd模块读取excel利用json模块生成相应的json文件的脚本的更多相关文章

  1. 利用 pandas库读取excel表格数据

    利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...

  2. Python xlrd模块读取Excel表中的数据

    1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...

  3. Xlrd模块读取Excel文件数据

    Xlrd模块使用 excel文件样例:

  4. Python-用xlrd模块读取excel,数字都是浮点型,日期格式是数字的解决办法

    excel文件内容: 读取excel: # coding=utf-8 import xlrd import sys reload(sys) sys.setdefaultencoding('utf-8' ...

  5. 猜想-未做 利用office组件读取excel数据

    ---未实际使用过 用SQL-Server访问Office的Access和Excel http://blog.sina.com.cn/s/blog_964237ea0101532x.html 2007 ...

  6. python 利用三方的xlrd模块读取excel文件,处理合并单元格

      目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式.  总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我 ...

  7. 后端Nodejs利用node-xlsx模块读取excel

    后端Nodejs(利用node-xlsx模块) /** * Created by zh on 16-9-14. */ var xlsx = require("node-xlsx") ...

  8. 基础补充:使用xlrd模块读取excel文件

    因为接口测试用例使用excel文件来维护的,所以有必要学习下操作excel的基本方法 参考博客:python 3 操作 excel 把自己练习的代码贴出来,是一些基本的操作,每行代码后面都加了注释. ...

  9. python-利用xlrd模块读取excel数据,将excel数据转换成字典格式

    前言 excel测试案例数据 转换成这种格式 实现代码 import os import xlrd excel_path = '..\data\\test_case.xlsx' data_path = ...

随机推荐

  1. django--用户认证组件

    用户认证组件 用户认证组件: 功能:用session记录登录验证状态 前提:用户表:django自带的auth_user 创建超级用户: python3 manage.py createsuperus ...

  2. 十张GIFs让你弄懂递归等概念

    图像(包括动图)是传递信息的一种高效方式,往往能增强表象.记忆与思维等方面的反应强度.所谓一图胜千言,说的就是这个道理. 今天为大家整理了十张动图GIFS,有助于认识循环.递归.二分检索等概念的具体运 ...

  3. Linux下tomcat运行命令

    tomcat启动 [root@master webapps]# /usr/local/tomcat7.0/bin/catalina.sh start startup.sh的源代码,其实就是执行   c ...

  4. linux 自定义模块来缓存skb的意义

    linux中,管理网卡收发报文的结构是sk_buff,这个结构比freebsd中的m_buf复杂的多,这个也是为什么现在用户态协议栈大多采用bsd为基础来实现的一个原因. struct sk_buff ...

  5. Oracle数据库中的数据出错的解决办法

    http://www.jcwcn.com/article/database/oracle/ 今天上班犯了一个严重的错误:把我们系统所使用的Oracle数据库中的数据给改掉了!当发现自己改错时,顿时冒了 ...

  6. ie11 调试工具不能使用

    使用ie11仿真ie8测试兼容性的时候,方便调试 dom和仿真都不能用 搜索 https://www.ludou.org/win7-ie-11-f12-bug.html也有相关问题 安装补丁 64位的 ...

  7. Nmap结果文件XML文件解析

    对nmap扫描结果xml格式的文件进行解析,无需直接xml解析或读取,可直接使用模块: 1.nmapparser 安装:pip install nmapparser Demo: #!/usr/bin/ ...

  8. c++之enum的好处与 define 的区别

    转载自 https://blog.csdn.net/zhh464626057/article/details/41038933 什么时候需要用到enum呢?就是变量的数值在几个范围之间.red,blu ...

  9. JDK8中JVM堆内存划分

    一:JVM中内存 JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用运行线程方法 存放本地暂时变量与线程中方法运行时候须要的引用对象地址. JVM全部的对象信息都 存放在堆内存中.相比 ...

  10. JUC(java.util.concurrent)

    在 Java 5.0 提供了 java.util.concurrent (简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池.异步 IO 和轻 ...