使用工作表名称作为键从python中的excel工作簿创建字典

时间:2017-06-26 16:20:06

标签: python excel dictionary xlrd

我在工作簿中有多个Excel工作表,其名称如sheet1,sheet2,sheet3,我正在使用标题作为键将每个工作表中的数据转换为字典。但是现在我想创建一个嵌套字典,我在其中添加工作表名称作为上述每个字典的关键字。我的桌子有多张这种形式: Sheet 1中

IP Address     prof     type
xx.xx.xx       abc      xyz
xx.xx.xx       efg      ijk

Sheet 2中

IP Address     prof     type
xx.xx.xx       abc      xyz
xx.xx.xx       efg      ijk

现在我尝试这样:

from xlrd import open_workbook

book = open_workbook('workbook.xls')
sheet = book.sheet_by_index(0)
sheet_names = book.sheet_names()

# reading header values 
keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)]

dict_list = []
for row_index in range(1, sheet.nrows):
    d = {keys[col_index]: sheet.cell(row_index, col_index).value
         for col_index in range(sheet.ncols)}
    dict_list.append(d)

print (dict_list)

打印出来:

[{'IP Address': 'xx.xx.xx', 'prof': 'abc', 'type': 'xyz'}, {'IP Address': 
'xx.xx.xx', 'prof': 'efg', 'type': 'ijk'}]

what I need is :
    [{'Sheet1':{'IP Address': 'xx.xx.xx', 'prof': 'abc', 'type': 'xyz'}, {'IP 
    Address': 'xx.xx.xx', 'prof': 'efg', 'type': 'ijk'}},
    {'Sheet2':{'IP Address': 'xx.xx.xx', 'prof': 'abc', 'type': 'xyz'}, {'IP 
      Address': 'xx.xx.xx', 'prof': 'efg', 'type': 'ijk'}},
       ]

我在将工作表名称添加为工作簿中多个工作表的键时遇到问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

from xlrd import open_workbook

book = open_workbook('Workbook1.xlsx')
pointSheets = book.sheet_names()
full_dict = {}
for i in pointSheets:
    # reading header values 
    sheet = book.sheet_by_name(i)
    keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)]

    dict_list = []
    for row_index in range(1, sheet.nrows):
        d = {keys[col_index]: sheet.cell(row_index, col_index).value
             for col_index in range(sheet.ncols)}
        dict_list.append(d)
    full_dict[i] = dict_list
    dict_list = {}

print (full_dict)

此代码遍历每个工作表,并向'fulll_dict'附加sheet_name,后跟每个工作表已返回的代码。 名称的获取是参考“How to get excel sheet name in Python using xlrd

完成的