利用xlrd模块读取excel利用json模块生成相应的json文件的脚本
excel的格式如下
python代码如下,这里最难的就是合并单元格的处理
import xlrd
import json excel_obj = xlrd.open_workbook("test.xlsx") sheet_name = excel_obj.sheet_names()[0] sheet_obj = excel_obj.sheet_by_index(0) hadoop_dict = {
"services": [
"AMBARI_METRICS",
"HBASE",
"HDFS",
"HIVE",
"KAFKA",
"MAPREDUCE2",
"PIG",
"SLIDER",
"SMARTSENSE",
"SPARK2",
"STORM",
"TEZ",
"YARN",
"ZOOKEEPER"
],
"pm_group" :[],
"host_groups":[]
} host = {}
vm = {}
# components_list = [] r_num = sheet_obj.nrows
c_num = sheet_obj.ncols merge_cell_list = sheet_obj.merged_cells # for i in range(r_num):
# if sheet_obj.cell_value(i,c_num-1):
# components_list.append(sheet_obj.cell_value(i,c_num-1)) # 获取最后一列的所有数据 for i in merge_cell_list:
if i[2] == 0:
host[sheet_obj.cell_value(i[0],i[2])] = [i[0],i[1],i[2],i[3]] # 存放所有合并的单元格 for k,v in host.items():
host_dict = {}
print(sheet_obj.cell_value(v[0],1),sheet_obj.cell_value(v[0],2),sep="---->")
# 获取主机的ip地址
pm_ip = sheet_obj.cell_value(v[0],2)
print(pm_ip,"物理机地址") print(sheet_obj.cell_value(v[0] + 1,1),sheet_obj.cell_value(v[0] + 1,2),sep="---->")
# 获取主机的主机名
pm_name = sheet_obj.cell_value(v[0] + 1,2) host_dict["ip"] = pm_ip
host_dict["hostname"] = pm_name
host_dict["vms"] = [] for vms_cell in merge_cell_list:
vm_dict = {}
vm_components_dict = {}
if vms_cell[1] <= host[k][1] and vms_cell[2] == 2 and vms_cell[0] > host[k][0] + 1:
print(sheet_obj.cell_value(vms_cell[0],2))
# 获取虚拟机的名称
print(sheet_obj.cell_value(vms_cell[0],vms_cell[2] + 1))
# 获取虚拟机的ip的k print(sheet_obj.cell_value(vms_cell[0],vms_cell[2] + 2))
# 获取虚拟机的ip地址
vm_ip = sheet_obj.cell_value(vms_cell[0], vms_cell[2] + 2) print(sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 1))
# 获取虚拟机的虚拟机名称的k print(sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 2))
# 获取虚拟机的名字的值 vm_name = sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 2) vm_name = sheet_obj.cell_value(vms_cell[0] + 1, vms_cell[2] + 2)
vm_dict = {
"hostname":vm_name,
} vm_components_dict["ip"] = vm_ip
vm_components_dict["hostname"] = vm_name
vm_components_dict["components"] = [] host_dict["vms"].append(vm_dict) vmcomponents_location_start = vms_cell[0] + 2
vmcomponents_location_end = vms_cell[1]
# print(vmcomponents_location_start,vmcomponents_location_end,"我是大傻逼")
vm_components_info_list = []
for i in range(vmcomponents_location_start,vmcomponents_location_end):
temp_components = sheet_obj.cell_value(i,c_num-1)
vm_components_info_list.append(temp_components) for component in vm_components_info_list:
temp_dict = {}
temp_dict["name"] = component
vm_components_dict["components"].append(temp_dict) hadoop_dict["host_groups"].append(vm_components_dict) # 获取每个虚拟机的components信息
hadoop_dict["pm_group"].append(host_dict) import json
file_name = "journalnode_".upper() + "test_journalnode_case_1" + "." + "json"
my_file_obj = open(file_name,"w") json.dump(hadoop_dict,my_file_obj,indent=4)
my_file_obj.close()
最后按照要求生成制定格式的json文件
{
"services": [
"AMBARI_METRICS",
"HBASE",
"HDFS",
"HIVE",
"KAFKA",
"MAPREDUCE2",
"PIG",
"SLIDER",
"SMARTSENSE",
"SPARK2",
"STORM",
"TEZ",
"YARN",
"ZOOKEEPER"
],
"pm_group": [
{
"ip": "1.1.1.1",
"hostname": "host1",
"vms": [
{
"hostname": "vm1"
},
{
"hostname": "vm2"
},
{
"hostname": "vm3"
}
]
},
{
"ip": "1.1.1.2",
"hostname": "host2",
"vms": [
{
"hostname": "vm4"
},
{
"hostname": "vm5"
}
]
},
{
"ip": "1.1.1.3",
"hostname": "host3",
"vms": [
{
"hostname": "vm6"
}
]
}
],
"host_groups": [
{
"ip": "192.168.1.1",
"hostname": "vm1",
"components": [
{
"name": "ZOOKEEPER_SERVER"
},
{
"name": "JOURNALNODE"
},
{
"name": "NODEMANAGER"
}
]
},
{
"ip": "192.168.1.2",
"hostname": "vm2",
"components": [
{
"name": "HBASE_REGIONSERVER"
},
{
"name": "ZKFC"
}
]
},
{
"ip": "192.168.1.3",
"hostname": "vm3",
"components": [
{
"name": "HBASE_CLIENT"
}
]
},
{
"ip": "192.168.1.4",
"hostname": "vm4",
"components": [
{
"name": "ZOOKEEPER_SERVER"
},
{
"name": "JOURNALNODE"
},
{
"name": "NODEMANAGER"
}
]
},
{
"ip": "192.168.1.5",
"hostname": "vm5",
"components": [
{
"name": "HBASE_REGIONSERVER"
},
{
"name": "ZKFC"
}
]
},
{
"ip": "192.168.1.6",
"hostname": "vm6",
"components": [
{
"name": "ZOOKEEPER_SERVER"
},
{
"name": "JOURNALNODE"
},
{
"name": "NODEMANAGER"
}
]
}
]
}
利用xlrd模块读取excel利用json模块生成相应的json文件的脚本的更多相关文章
- 利用 pandas库读取excel表格数据
利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...
- Python xlrd模块读取Excel表中的数据
1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...
- Xlrd模块读取Excel文件数据
Xlrd模块使用 excel文件样例:
- Python-用xlrd模块读取excel,数字都是浮点型,日期格式是数字的解决办法
excel文件内容: 读取excel: # coding=utf-8 import xlrd import sys reload(sys) sys.setdefaultencoding('utf-8' ...
- 猜想-未做 利用office组件读取excel数据
---未实际使用过 用SQL-Server访问Office的Access和Excel http://blog.sina.com.cn/s/blog_964237ea0101532x.html 2007 ...
- python 利用三方的xlrd模块读取excel文件,处理合并单元格
目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我 ...
- 后端Nodejs利用node-xlsx模块读取excel
后端Nodejs(利用node-xlsx模块) /** * Created by zh on 16-9-14. */ var xlsx = require("node-xlsx") ...
- 基础补充:使用xlrd模块读取excel文件
因为接口测试用例使用excel文件来维护的,所以有必要学习下操作excel的基本方法 参考博客:python 3 操作 excel 把自己练习的代码贴出来,是一些基本的操作,每行代码后面都加了注释. ...
- python-利用xlrd模块读取excel数据,将excel数据转换成字典格式
前言 excel测试案例数据 转换成这种格式 实现代码 import os import xlrd excel_path = '..\data\\test_case.xlsx' data_path = ...
随机推荐
- jsfl 常用自定义方法
//创建文件夹 function creatFile(fileURl) { if (FLfile.createFolder(fileURl)) { //alert("创建成功 "+ ...
- Python2 错误记录1File "<string>", line 1, in <module> NameError: name 'f' is not defined
Python 2下 count = 0 while count < 3: user = input('>>>') pwd = input('>>>') if ...
- JSP基本
JSPとは.HTMLファイルにJavaコードを埋め込んでおき.クライアントの要求に応じてコードを実行.処理結果のみをクライアントに送信する技術です. 1.JSPは実はサーブレットです.最初にリクエスト ...
- linux command>file 2>&1 & 命令详解
command>file >& & 命令的最后一个&表示把该命令以后台的job的形式运行 一个命令的执行伴随着三种输入输出 标准输入(stdin):默认指向键盘的输 ...
- Python文件和目录模块介绍:glob、shutil、ConfigParser
glob模块 查找符合特定规则的文件路径名,路径名可以使用绝对路径也可以使用相对路径.查找文件会使用到三个通配符,星号*,问号?和中括号[],其中"*"表示匹配0~n个字符, &q ...
- git-04 同意分支合并
https://blog.csdn.net/boysky0015/article/details/78185879/
- datagridview表头全选
参与程序http://www.codeproject.com/KB/grid/CheckBoxHeaderCell.aspx 这里老外写的一个控件,他少了委托重载的一个方法.先写一个控件 public ...
- 通过DOS命令批量重命名文件
以下为提供的两种方法:遍历当前目录下的所有文件名以.avi结尾的文件,然后权限规则进行修改(规则含义请自行查找资料).第一种方法有缺陷,更改完所有的文件名后,会多改一次.请斟酌使用.第二种方法解决了第 ...
- 吴裕雄 27-MySQL 元数据
你可能想知道MySQL以下三种信息:查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数.数据库和数据表的信息: 包含了数据库及数据表的结构信息.MySQL服务器信息: 包含 ...
- 关于H5唤醒APP的功能实现(千辛万苦啊!)
首先,我是个后端,写java的,甚至不是搞移动端的,所以js这方面有点底子但不专业,对于出现的错误也请见谅,原来项目要求有个H5页面打开APP的功能就强行要做,没办法就想办法搞一下,网上的教程基本都是 ...